启动代理无法启动

时间:2010-03-16 16:22:51

标签: macos daemon agent launchd

我正在尝试编写一个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属性已更改?

2 个答案:

答案 0 :(得分:2)

不确定是否是问题,但我认为你不应该同时指定OnDemand / RunAtLoad和KeepAlive。据我了解文档,KeepAlive键替换OnDemand / RunAtLoad组合。

http://developer.apple.com/mac/library/technotes/tn2005/tn2083.html#SECCODINGRECOMMENDATIONS

答案 1 :(得分:2)

发现问题 - 显然launchd无法与旧式plist文件一起正常工作。它加载正常,但不会运行任何东西。将上述文件重新创建为新样式的XML文件解决了这个问题。