Sco*_*nds 11 startup mac-osx launchd
我想在启动时(而不是登录时)以特定用户身份运行脚本。我认为 launchd LaunchDaemon 会做到这一点,但 'man launchd' 说:
“如果您希望您的服务作为某个用户运行,在该用户的环境中,使其成为启动代理是在 Mac OS X 上完成此任务的唯一支持的方法。换句话说,执行 setuid(2) 是不够的) 成为真正意义上的 Mac OS X 用户。”
他们不是在开玩笑——当我尝试将我的脚本作为 LaunchDaemon 运行时,它不起作用。特别是,我正在尝试使用“security”命令自动执行一些钥匙串操作,当我通过 LaunchDaemon 运行脚本时,它不会让我更改默认钥匙串,尽管脚本在从 shell 使用 sudo 运行时运行良好。
LaunchAgent 不起作用,因为目标是让进程在没有用户登录的情况下运行,而 LaunchAgents 仅在有人登录时运行。我查看了 cron 和 @reboot 指令,看起来很有希望,但我读到 cron 是在 OSX 上已弃用。
小智 12
我在尝试使长时间运行的进程使用默认钥匙串时遇到了类似的问题。本质上,LaunchAgent 似乎没有在完整的登录环境中运行来执行安全命令,因此更改默认钥匙串不起作用,并且返回/Library/Preferences/目录的权限错误。
秘诀是添加:
<key>SessionCreate</key>
<true/>
Run Code Online (Sandbox Code Playgroud)
到你的 plist。这是一个未记录的功能,它将强制一个适当的环境,并使您能够设置默认的钥匙串。感谢joensson关于这个问题指着我在正确的方向。
小智 6
保存为全局守护进程 ( /Library/LaunchDaemons) 并使用 key 指定用户UserName:
<key>UserName</key>
<string>Put username here</string>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6164 次 |
| 最近记录: |