1

我正在尝试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财产变了?

4

2 回答 2

2

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

于 2010-03-23T09:46:37.483 回答
2

不确定是否是问题所在,但我认为您不应该同时指定 OnDemand/RunAtLoad 和 KeepAlive。据我了解文档,KeepAlive 键取代了 OnDemand/RunAtLoad 组合。

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

于 2010-03-17T01:37:32.797 回答