如何将已经运行的二进制文件设置为在启动时运行

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


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


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


cp daemon.plist ~/Library/LaunchAgents/daemon.plist

(cp将 plist 放入 LaunchAgents 目录)


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

(然后用 加载 plist launchctl。)


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


.plist如果你想看的话,这里是文件:


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

    <key>Label</key>

    <string>daemon</string>

    <key>ProgramArguments</key>

    <array>

        <string>/Applications/Daemon.app/Contents/MacOS/daemon</string>

    </array>

    <key>ProcessType</key>

    <string>Interactive</string>

    <key>RunAtLoad</key>

    <true/>

    <key>KeepAlive</key>

    <false/>

</dict>

</plist>


炎炎设计
浏览 155回答 1
1回答

一只斗牛犬

我想到了。所以首先,二进制文件正在运行。它开始时未启用在启动时运行。要初始化,您cp需要plist进入~/Library/LaunchAgents/目录:cp daemon.plist ~/Library/LaunchAgents/daemon.plist看起来plist像这样:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict>&nbsp; &nbsp; <key>Label</key>&nbsp; &nbsp; <string>daemon</string>&nbsp; &nbsp; <key>ProgramArguments</key>&nbsp; &nbsp; <array>&nbsp; &nbsp; &nbsp; &nbsp; <string>/Applications/Daemon.app/Contents/MacOS/daemon</string>&nbsp; &nbsp; </array>&nbsp; &nbsp; <key>ProcessType</key>&nbsp; &nbsp; <string>Interactive</string>&nbsp; &nbsp; <key>RunAtLoad</key>&nbsp; &nbsp; <false/>&nbsp; &nbsp; <key>KeepAlive</key>&nbsp; &nbsp; <false/></dict></plist>注意:RunAtLoad键设置为false。然后我们将其加载到launchctl:launchctl load -w ~/Library/LaunchAgents/daemon.plist它不应加载,因为RunAtLoad设置为false.然后,我们可以像这样在启动时启用和禁用运行:启用:设为RunAtLoad_truecp结束plist_禁用:设为RunAtLoad_falsecp结束plist_有点hacky,但它有效。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go