Агент Launchd не запускается - PullRequest
1 голос
/ 16 марта 2010

Я пытаюсь написать 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 ]

2 голосов
/ 23 марта 2010

Обнаружил проблему - очевидно launchd не работает должным образом с файлами plist старого стиля. Он загружается нормально, но ничего не запускается. Повторное создание вышеуказанного файла в виде файла XML нового стиля решило проблему.

2 голосов
/ 17 марта 2010

Не уверен, что это проблема, но я думаю, что вы не должны указывать одновременно OnDemand / RunAtLoad и KeepAlive. Как я понимаю из документации, ключ KeepAlive заменяет комбинацию OnDemand / RunAtLoad.

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

...