如何在MacOS上加载系统范围的守护进程

时间:2009-12-14 10:18:32

标签: unix daemon launchd

我正在尝试使用此命令加载我的守护程序应用程序launchctl load /Library/LaunchDaemons/myPlistFileName它工作正常,但仅在我的用户登录系统时。

如何加载我的deamon-app,它会在没有任何用户登录系统的情况下保持加载状态(如windows-services)?

命令sudo launchctl load /Library/LaunchDaemons/myPlistFileName给我一个错误 - > 无法加载

这是正确的方法吗?


编辑:我的Plist文件

<key>Label</key>
<string>com.myCompany.myApplication</string>
<key>ProgramArguments</key>
<array>
    <string>open</string>
    <string>-g</string>
    <string>/Applications/myAppDir/myApplication.app</string>
</array>
<key>UserName</key>
<string>root</string>
<key>GroupName</key>
<string>wheel</string>
<key>KeepAlive</key>
<true/>
<key>OnDemand</key>
<false/>

目前是这样的:在系统启动时,我的守护进程以root权限启动。在我使用我的用户帐户登录后,守护程序进程重新启动,我的用户是进程的新所有者

1 个答案:

答案 0 :(得分:3)

使用“sudo launchctl load&lt; name-of-plist-file&gt ;; sudo launchctl start&lt; job-name&gt;”或者,在较新版本的launchctl上,“sudo launchctl submit -l&lt; label&gt; - &lt; command&gt; [&lt; arg0&gt; ...&lt; argN&gt;]”是要走的路。

很难诊断为什么你的“sudo launchctl”命令在没有实际看到PLIST的情况下失败,但是你应该确保PLIST的权限对每个人都是可读的(但只能由root:wheel或root:admin写入) ,你应该确定已经给出了“UserName”和“GroupName”字段,你应该确保“Program”给出了相关程序的绝对路径(例如,不依赖于用户的特定设置) PATH环境变量),如果适用,应正确定义“WorkingDirectory”和“EnvironmentVariables”字段。

另请参阅:man launchd.plist

编辑:
在尝试执行“sudo ... load”之前,您也可以尝试运行“stop”和“unload”命令。

编辑:
现在您已经上传了PLIST文件,很清楚您的问题是什么......当您以另一个用户身份运行时,您无法使用open命令。见running OS X GUI app as root。另外,KeepAlive和OnDemand键,我很确定,是无偿的。我想那些可以删除。