2010-03-16 3 views
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 

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 файлов. Он загружается нормально, но ничего не запускает. Повторное создание вышеуказанного файла в качестве файла нового стиля XML решило проблему.

+0

Можете ли вы привести exapmle нового файла стиля XML, у меня такая же проблема – Geet

2

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

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

+0

Боюсь, что это не имеет никакого значения. – Thomi

+0

@Thomi, но вы не должны использовать KeepAlive с OnDemand/RunAtLoad. –

Смежные вопросы