我需要能够从根级别守护程序启动/停止每会话GUI代理.
我希望能够做的基本上是
for num in `ps ax | grep [s]bin/launchd | cut -c 1-5`;
do
if [ $num -ne 1 ];
then
sudo launchctl bsexec $num launchctl (un)load -S Aqua /Library/LaunchAgents/com.mycompany.mydaemon.plist;
fi;
done
Run Code Online (Sandbox Code Playgroud)
但这仅启动/停止一个实例,并在当前GUI会话中以root身份运行.如果我离开sudo,我就会开始
task_for_pid() (os/kern) failure
Couldn't switch to new bootstrap port: (ipc/send) invalid port right
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用bsexec的各种其他排列(包括使用load/unload命令从bsexec调用辅助脚本),但是我永远不能让实例以root身份启动,而不能在另一个GUI会话中启动.
我也试图与乱搞su - <user> ...和sudo -u <user> ...,但没有运气有两种(如很多人在上面链接的文章和其他地方的讨论).
有人有什么想法吗?
编辑:我尝试使用Graham Lee下面建议的包装工具执行此操作,但是我收到以下错误:
launch_msg(): Socket is not connected
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的命令行命令,包装器和脚本(501是用户ID,63093是另一个登录到系统的用户的launchd的pid):
命令行:
sudo launchctl bsexec 63093 /path/TestSetUIDAndExecuteTool …Run Code Online (Sandbox Code Playgroud) 只是想知道是否有人已成功提交应用程序或知道使用launchd的Mac App Store中存在的应用程序.
谢谢.
我正在尝试在OS X Mountain Lion 10.8.3中安排一个简单的任务
launchctl start nextstopsun.helloworld
Run Code Online (Sandbox Code Playgroud)
命令不执行脚本并将消息抛出到控制台
4/2/13 9:50:49.663 PM com.apple.launchd.peruser.501[139]: (nextstopsun.helloworld[46729]) Job failed to exec(3) for weird reason: 8
Run Code Online (Sandbox Code Playgroud)
我的plist非常简单:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>nextstopsun.helloworld</string>
<key>Program</key>
<string>/Users/nextstopsun/Work/scripts/hw.sh</string>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>21</integer>
<key>Minute</key>
<integer>15</integer>
</dict>
<key>UserName</key>
<string>nextstopsun</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
脚本也很简单
echo "Hello World!" > hw.log
Run Code Online (Sandbox Code Playgroud)
launchctl加载它没有错误.从shell执行脚本时,它按预期工作.注销并重新登录无济于事.在Google中没有找到任何答案.什么是"奇怪的原因:8"都是关于什么的?