如果启动服务以 78 退出代码退出,如何自动重新启动该服务

如果启动服务以 78 退出代码退出,如何自动重新启动该服务

我正在使用 launchd 服务加载 ac 二进制文件。每次系统重启时都应该重新加载。下面是我的 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>com.example</string>
<key>ProgramArguments</key>
<array>
    <string>/etc/example/usr/sbin/example_cbinary</string>
</array>
<key>RunAtLoad</key>
    <true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>

有时,它会以 78 退出代码退出。

launchctl list | grep example
-   78  com.example

我找不到根本原因。因为这种情况百发百中。为了解决这个问题,我正在卸载和加载此服务。我希望它在以 78 状态退出时自动卸载和加载。

任何帮助都非常值得赞赏

提前致谢

答案1

我知道这是一篇老文章,但我遇到了同样的问题,可以通过编写一个 python 脚本来解决它,该脚本 grep 78 并调用系统命令(例如 shell 脚本)来卸载和加载服务。并将此脚本放入 crontab

伪代码:

/bin/bash #!/bin/bash

导出 PATH=(你的 $PATH)

    erg = `launchctl 列表 | grep 示例 | grep 78`
    如果 [ $erg = '78']
    然后
        launchctl 卸载/Library/LaunchDeamons/example.plist
        launchctl 加载/Library/LaunchDeamons/example.plist
        # 或许还
        launchctl 启动示例
       

如果该脚本可以在 shell 上正确执行,则将其放入 crontab。

cron 条目示例:

* * * * * reload_example.sh(注意访问权限和新的糟糕的安全选项)

也许这是一个有用的提示。

相关内容