我正在尝试编写一个launchd agent,为每个登录到Mac系统的用户运行一个简单的应用程序。
我已经创建了一个名为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属性?
发布于 2010-03-23 17:46:37
找到问题了--显然,对于旧式的plist文件,launchd不能正常工作。它加载正常,但不会运行任何东西。将上述文件重新创建为新样式的XML文件解决了此问题。
发布于 2010-03-17 09:37:33
我不确定这是否是问题所在,但我认为你不应该同时指定OnDemand/RunAtLoad和KeepAlive。根据我对文档的理解,KeepAlive密钥替换了OnDemand/RunAtLoad组合。
http://developer.apple.com/mac/library/technotes/tn2005/tn2083.html#SECCODINGRECOMMENDATIONS
https://stackoverflow.com/questions/2456112
复制相似问题