为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
炎炎设计 2023-06-19 17:49:21
我有一个 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>
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

我想到了。


所以首先,二进制文件正在运行。它开始时未启用在启动时运行。要初始化,您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>

    <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>

    <false/>

    <key>KeepAlive</key>

    <false/>

</dict>

</plist>

注意:RunAtLoad键设置为false。


然后我们将其加载到launchctl:


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

它不应加载,因为RunAtLoad设置为false.


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

启用:

  • 设为RunAtLoad_true

  • cp结束plist_

禁用:

  • 设为RunAtLoad_false

  • cp结束plist_

有点hacky,但它有效。


查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信