在OSX上使用launchctl启动和停止服务看起来很棒但是我还是没有看到检查返回值以确保它确实启动了。即使服务无法启动,返回值似乎总是回归为零
此plist文件包含错误,因此无法按预期启动Drizzle
% launchctl start /Library/LaunchDaemons/org.drizzlebad.plist
% echo $?
0
除了检查此服务的pid文件是否存在以外的任何建议?
答案 0 :(得分:10)
你必须做错事,因为launchctl
仅在成功时返回0:
$ launchctl start foobar
launchctl start error: No such process
$ echo $?
1
此外,launchctl start
获取作业标题(通常是反向DNS样式的名称),而不是plist的路径。它是launchctl load
和unload
,它采取了一条路径。
如果您坚持认为它对您不起作用,您可以尝试仅为您的工作名称填写launchctl list
的输出,并在必要时解析字段。
答案 1 :(得分:1)
当您从终端进行launchctl list
时,您会注意到 - 在第二列中...有一个主要是0和-s的列表...如果您的程序退出不正确,它将会在第二列中显示退出代码....通常是-1或有时是-251,或者不管情况如何......并且记住......只是因为你的launchd项目可能已经崩溃了... launchctl可能仍然狂热地试图“让它工作” - 每10秒.....所以不要让一个borked启动过程永远存在,因为它肯定会影响性能..
使用-w ....和plist的完整路径卸载它,或者至少使用bundle标识符停止(并可选择删除它)。 -w将在/ var / db / launchd文件夹中的plist中创建一个秘密条目,告诉内核下次在机器启动时不加载它。无论“启用的”XML条目在Plist中可能说什么。 ..所以要注意,下次启动时,物品是否会复活,不仅仅是那个标志......
如果你想要你可以在tat var文件夹深处备份那个overrides.plist文件并重新开始,如果它随着时间的推移而变得过于复杂的加载和卸载...还有其他方法可以做到,但我要去现在闭嘴..在我偶然告诉你如何完全软管你的电脑之前......