如何在OS X启动时以特定用户身份启动进程?

我想运行一个脚本作为一个特定的用户在启动(而不是在login)。 我以为启动的LaunchDaemon会这样做,但是“启动人”说:

“如果你希望你的服务以特定的用户身份运行,那么在这个用户的环境中,使其成为一个启动代理是在Mac OS X上完成这个操作的唯一支持手段。换句话说,执行一个setuid(2 )成为Mac OS X上真正意义上的用户。“

他们不是在开玩笑 – 当我尝试将我的脚本作为LaunchDaemon运行时,它不起作用。 特别是我试图使用“安全”命令自动化一些钥匙串操作,并且当我通过LaunchDaemon运行脚本时,它不会让我更改默认的钥匙串,尽pipe脚本在从shell运行sudo时运行良好。

LaunchAgent将无法工作,因为目标是在没有用户login的情况下运行进程,而LaunchAgent仅在有人login时运行。我查看了cron和@reboot指令,看起来很有希望,但是我读到的是cron在OSX上已弃用。

我有类似的问题试图使一个长期运行的过程使用默认钥匙串。 基本上LaunchAgent似乎并不是在完整的login环境中运行安全命令,所以更改默认的钥匙串不起作用,并返回/Library/Preferences/目录的权限错误。

秘诀就是补充:

 <key>SessionCreate</key> <true/> 

给你的plist。 这是一个无证的function,将强制一个适当的环境,并将使您能够设置默认的钥匙串。 感谢joensson在这个问题上指出我正确的方向。

还有很多其他地方可以隐藏OS X中的启动项目(其中大部分完全不受支持)。 我会尝试/etc/rc.local ; 我似乎还记得,在Panther工作,所以有可能今天仍然有效。

保存为全局守护进程( /Library/LaunchDaemons )并指定具有密钥UserName

 <key>UserName</key> <string>Put username here</string>