我正在尝试编写一个launchd agent
,为每个登录Mac OS X系统的用户运行一个简单的应用程序。
我创建了一个名为com.mycompany.myapp.plist
的文件,并将其放在/Library/LaunchAgents
中。该文件的内容是:
{
LimitLoadToSessionType = "Aqua";
StartInterval = 10;
OnDemand = NO;
KeepAlive = YES;
RunAtLoad = YES;
Label = "com.mycompany.myapp";
Program = "/Users/thomi/myapp";
ProgramArguments = (
"/Users/thomi/myapp",
"-l",
"-d",
);
}
最初我没有设置StartInterval
密钥,因为我认为代理会自动启动。问题是代理无法启动,除非我手动发出以下两个命令:
launchctl load -S Aqua -D all
launchctl start com.mycompany.myapp
另外,当我运行launchctl list com.mycompany.myapp
时,我得到以下输出:
{
"Label" = "com.mycompany.myapp";
"LimitLoadToSessionType" = "System";
"OnDemand" = true;
"LastExitStatus" = 0;
"TimeOut" = 30;
"Program" = "/Users/thomi/myapp";
ProgramArguments = (
"/Users/thomi/myapp",
"-l",
"-d",
);
};
请注意LimitLoadToSessionType
参数已更改。
我在这里遗漏了什么吗?是否有不同的机制来启动这样的代理?为什么LimitLoadToSessionType
属性已更改?
答案 0 :(得分:2)
不确定是否是问题,但我认为你不应该同时指定OnDemand / RunAtLoad和KeepAlive。据我了解文档,KeepAlive键替换OnDemand / RunAtLoad组合。
http://developer.apple.com/mac/library/technotes/tn2005/tn2083.html#SECCODINGRECOMMENDATIONS
答案 1 :(得分:2)
发现问题 - 显然launchd
无法与旧式plist
文件一起正常工作。它加载正常,但不会运行任何东西。将上述文件重新创建为新样式的XML
文件解决了这个问题。