【问题标题】:Launchd agent not starting已启动的代理未启动
【发布时间】:2011-01-28 04:56:19
【问题描述】:

我正在尝试编写一个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 属性发生了变化?

【问题讨论】:

    标签: macos daemon agent launchd


    【解决方案1】:

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

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

    【讨论】:

    • 恐怕这没什么区别。
    • @Thomi 但您不应将 KeepAlive 与 OnDemand/RunAtLoad 一起使用。
    【解决方案2】:

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

    【讨论】:

    • 你能给个新样式 XML 文件的例子吗,我也有同样的问题
    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    相关资源
    最近更新 更多