登录
首页 >  Golang >  Go问答

将二进制文件设为启动时运行的方法

来源:stackoverflow

时间:2024-03-24 12:45:41 465浏览 收藏

本文探讨了在 macOS 上将二进制文件设为启动时运行的方法。文章指出,虽然将 plist 文件复制到 ~/library/launchagents/ 目录并使用 launchctl 加载它可以使二进制文件在启动时运行,但它会导致该二进制文件启动另一个实例。为了解决这个问题,文章提出了一种解决方法,其中 runatload 键在 plist 文件中设置为 false,从而防止二进制文件在加载时运行。要启用或禁用启动时运行,可以修改 runatload 键的值并重新加载 plist 文件。

问题内容

我有一个 go 程序,它应该作为守护进程运行,为用户提供最少的前端(只是系统托盘中的一个图标。)

它是用 go 编写的这一事实并不重要,我遇到的主要问题是让二进制文件(已经在运行)在 mac 上启动时运行。

我可以将二进制文件设置为在启动时运行,如下所示:

cp daemon.plist ~/library/launchagents/daemon.plist

(将cp plist放入launchagents目录中)

launchctl load -w ~/library/launchagents/daemon.plist

(然后使用 launchctl 加载 plist。)

效果很好。唯一的问题是 launchctl load 它启动了已经运行的二进制文件的另一个实例。我希望能够在启动时启用(和禁用)正在运行的二进制文件运行二进制文件,而无需启动它的另一个实例。

如果您想查看的话,这是 .plist 文件:





    Label
    daemon
    ProgramArguments
    
        /Applications/Daemon.app/Contents/MacOS/daemon
    
    ProcessType
    Interactive
    RunAtLoad
    
    KeepAlive
    


解决方案


我明白了。

首先,二进制文件正在运行。它开始时未启用在启动时运行。要初始化,您将 cp plist 复制到 ~/library/launchagents/ 目录:

cp daemon.plist ~/library/launchagents/daemon.plist

plist 看起来像这样:





    label
    daemon
    programarguments
    
        /applications/daemon.app/contents/macos/daemon
    
    processtype
    interactive
    runatload
    
    keepalive
    

注意:runatload 键设置为 false

然后我们将其加载到launchctl中:

launchctl load -w ~/Library/LaunchAgents/daemon.plist

由于 runatload 设置为 false,因此不应加载。

然后,我们可以像这样启用和禁用启动时运行:

启用:

  • runatload 设置为 true
  • cp plist 超过

要禁用:

  • runatload 设置为 false
  • cp plist 超过

有点hacky,但它有效。

以上就是《将二进制文件设为启动时运行的方法》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>