2

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

我如何加载我的守护程序应用程序,它会在没有任何用户登录系统的情况下保持加载(如 Windows 服务)?

该命令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 权限启动。在我使用我的用户帐户登录后,守护进程重新启动,我的用户是该进程的新所有者

4

1 回答 1

3

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

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

另请参阅:man launchd.plist

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

编辑:
现在您已经上传了您的 PLIST 文件,很清楚您的问题是什么......当以其他用户身份运行时,您不能使用 open 命令。请参阅以 root 身份运行 OS X GUI 应用程序。另外,我很确定 KeepAlive 和 OnDemand 键是免费的。我认为这些可以删除。

于 2009-12-14T18:56:42.583 回答