我想在启动时(而不是登录时)以特定用户身份运行脚本。我以为 launchd LaunchDaemon 可以做到这一点,但“man launchd”显示:
“如果您希望您的服务以某个用户的身份运行,那么在该用户的环境中,使其成为 launchd 代理是 Mac OS X 上实现此目的的唯一支持方式。换句话说,在 Mac OS X 上执行 setuid(2) 不足以成为真正意义上的用户。”
他们不是在开玩笑——当我尝试将脚本作为 LaunchDaemon 运行时,它不起作用。特别是,我尝试使用“security”命令自动执行一些钥匙串操作,当我通过 LaunchDaemon 运行脚本时,它不允许我更改默认钥匙串,尽管从 shell 使用 sudo 运行时脚本运行良好。
LaunchAgent 不起作用,因为目标是在没有用户登录的情况下运行进程,而 LaunchAgents 仅在有人登录时运行。我查看了 cron 和 @reboot 指令,看起来很有希望,但我读到 cron 在 OSX 上已被弃用。
答案1
答案2
保存为全局守护进程(/Library/LaunchDaemons
)并使用键指定用户UserName
:
<key>UserName</key>
<string>Put username here</string>
答案3
有其他一些地方您可以在 OS X 中隐藏启动项(其中大部分完全不受支持)。我会尝试/etc/rc.local
;我似乎记得在 Panther 中工作,所以它可能现在仍然有效。