2016-01-06 5 views
0

Я пытаюсь написать сценарий launchd, который будет запускать скрипт Python каждый час.returnctl status возвращает 2

Я создал следующий файл в ~/Library/LaunchAgents/

com.b00tahead.engage-check.plist

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>com.b00tahead.engage-check</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Library/Frameworks/Python.framework/Versions/3.5/bin/python3</string> 
     <string>Projects/engage_scripts/engage_check.py</string> 
    </array> 
    <key>StartInterval</key> 
    <integer>3600</integer> 
</dict> 
</plist> 

Я затем запустить:

launchctl load ~/Library/LaunchAgents/com.b00tahead.engage-check.plist 
launchctl start com.b00tahead.engage-check 

Когда я бегу launchctl list это показывает процесс как:

PID Status Label 
- 2  com.b00tahead.engage-check 

Я не совсем уверен, что указывает этот код возврата. Я могу запустить скрипт просто через терминал как python3 Projects/engage_scripts/engage_check.py

Сценарий Python записывает некоторые данные в TXT-файл на моем рабочем столе.

Это то, что launchctl list com.b00tahead.engage-check возвращается:

{ 
    "LimitLoadToSessionType" = "Aqua"; 
    "Label" = "com.b00tahead.engage-check"; 
    "TimeOut" = 30; 
    "OnDemand" = true; 
    "LastExitStatus" = 512; 
    "Program" = "/Library/Frameworks/Python.framework/Versions/3.5/bin/python3"; 
    "ProgramArguments" = (
     "/Library/Frameworks/Python.framework/Versions/3.5/bin/python3"; 
     "Projects/engage_scripts/engage_check.py"; 
    ); 
}; 
+0

Если сценарий успешно завершен, он обычно возвращает статус '0'. Вероятнее всего, вы получите более подробную информацию о том, что происходит, используя команду 'launchctl list com.b00tahead.engage-check' –

+0

Обновлено с помощью результатов из списка запуска launch com.b00tahead.engage-check' – Scott

ответ

0

Я думаю, что аргумент в ProgramArguments должен иметь абсолютный путь (не родственник, такой как Projects/...).

В случае ошибки следует проверить системный журнал, например.

tail -f /var/log/system.log 

или пользовательский журнал можно использовать, указав следующие строки:

<key>StandardOutPath</key> 
<string>/var/log/myjob.log</string> 
<key>StandardErrorPath</key> 
<string>/var/log/myjob.log</string> 

См: Debugging launchd Jobs section of Creating Launch Daemons and Agents page.