登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

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

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

本文探讨了在 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 文件:

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

解决方案


我明白了。

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

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

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