题
我试图写运行为登录到Mac OS X的系统中的每个用户的简单应用程序一个launchd agent
。
我已经创建了一个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
Firther,当我运行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
属性更改?
解决方案 2
发现问题 - 显然launchd
不与旧式plist
de文件正常工作。它加载行,但将不会运行任何东西。重新创建上述文件作为一种新型XML
文件解决了问题。
其他提示
不知道它的问题,但我认为你不应该同时指定的OnDemand / RunAtLoad和Keepalive在一起。据我了解的文档中,保持活动键取代了按需/ RunAtLoad组合。
http://developer.apple.com/mac /library/technotes/tn2005/tn2083.html#SECCODINGRECOMMENDATIONS
不隶属于 StackOverflow