如何在启动时将 运行ning 二进制文件设置为 运行
How to set already running binary to run at startup
我有一个 Go 程序,它应该 运行 作为一个守护进程,为用户提供最少的前端(只是系统托盘中的一个图标。)
它是用 Go 编写的这一事实并不重要,我遇到的主要问题是在 运行 启动时将二进制文件(已经 运行ning)转换为=34=].
我可以在启动时将二进制文件设置为 运行,如下所示:
cp daemon.plist ~/Library/LaunchAgents/daemon.plist
(cp
将plist放入LaunchAgents目录)
launchctl load -w ~/Library/LaunchAgents/daemon.plist
(然后用 launchctl
加载 plist。)
而且效果很好。唯一的问题是 launchctl load
它启动了另一个已经 运行ning 的二进制文件实例。我希望能够在启动时为 运行ning 二进制文件启用(和禁用)运行ning 二进制文件,而不启动它的另一个实例。
这里是 .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>
我想通了。
所以首先,二进制是 运行ning。它在启动时未启用 运行。要初始化,您 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
。
然后,我们可以在启动时启用和禁用 运行ning,如下所示:
启用:
- 将
RunAtLoad
设置为true
cp
plist
超过
要禁用:
- 将
RunAtLoad
设置为false
cp
plist
超过
有点hacky,但它有效。
我有一个 Go 程序,它应该 运行 作为一个守护进程,为用户提供最少的前端(只是系统托盘中的一个图标。)
它是用 Go 编写的这一事实并不重要,我遇到的主要问题是在 运行 启动时将二进制文件(已经 运行ning)转换为=34=].
我可以在启动时将二进制文件设置为 运行,如下所示:
cp daemon.plist ~/Library/LaunchAgents/daemon.plist
(cp
将plist放入LaunchAgents目录)
launchctl load -w ~/Library/LaunchAgents/daemon.plist
(然后用 launchctl
加载 plist。)
而且效果很好。唯一的问题是 launchctl load
它启动了另一个已经 运行ning 的二进制文件实例。我希望能够在启动时为 运行ning 二进制文件启用(和禁用)运行ning 二进制文件,而不启动它的另一个实例。
这里是 .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>
我想通了。
所以首先,二进制是 运行ning。它在启动时未启用 运行。要初始化,您 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
。
然后,我们可以在启动时启用和禁用 运行ning,如下所示:
启用:
- 将
RunAtLoad
设置为true
cp
plist
超过
要禁用:
- 将
RunAtLoad
设置为false
cp
plist
超过
有点hacky,但它有效。