在Yosemite中使用root帐户执行启动代理

时间:2015-08-10 12:51:38

标签: macos launchd yosemite

我尝试使用具有登录用户权限的launchd执行我的测试守护程序。 我将我的plist文件保存在/Library/LaunchAgents/myplist,并且在Mavericks的登录用户帐户中执行得很好。 我的命令是这样的。

$launchctl load /Library/LaunchAgents/myplist

但是当我在Yosemite尝试时,它以root帐号执行。 据我所知,它应该作为登录用户帐户执行,但它不是在Yosemite。我还将myplist文件移到~/Library/LauchAgents/myplist,但结果是一样的。 在Yosemite发布了什么以及如何使用登录用户帐户执行launchd?

1 个答案:

答案 0 :(得分:0)

可以使用 UserName 键在守护程序的plist中指定用户。例如: -

<key>UserName</key>
<string>_daemonUser</string>

其中 _daemonUser 是守护程序应该运行的用户的名称,假设存在具有该名称的用户。

如果要使用当前登录用户的名称,则必须在调用 launchctl load 时指定该名称。在bash脚本中,使用sudo运行,你可以这样做: -

SESSION_USER="$USER"
echo Starting MyDaemon as user $SESSION_USER
su $SESSION_USER -c 'launchctl load /Library/LaunchAgents/myplist.plist' 

如果用户切换适用且他们已经登录,您可能还需要考虑其他用户。这更复杂,但有一个解决方案here