我在 launchctl 中设置了几个服务,它们都会在启动时启动,并且无论因何种原因停止时都会自动重新启动。到目前为止,一切都很好。
但有时我希望其中一个服务退出并且暂时不重新启动。
除了从 launchctl 中删除服务(这也会立即停止服务,但我不想这样做)之外,还有其他推荐的方法吗?
答案1
我找到了一种方法来做到这一点。我在 plist 文件中添加了以下内容。
代替
<key>KeepAlive</key>
<true/>
我做到了
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
仅将 KeepAlive 设置为 false 就会干扰作业的启动。(它大概在等待被某人调用。)但 KeepAlive 的状态也可以在运行时确定。此服务现在在无故退出时(即被终止时)会自动重新启动,但在因某种原因退出时(即定期关闭)不会重新启动。这就是我需要的。
答案2
所以你想终止进程而不重新启动它,但又不想立即终止它?这对你来说真的有意义吗?
不,launchd 没有这样的功能。