Я использовал на первый взгляд простые документы Apple для создания LaunchDaemon для запуска сценария Node.js, который я написал.
Вот файл plist
. Это в основном копия-вставка из документов Apple, настроенная на запуск каждые 300 секунд:
<?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.wintr.eodemail</string>
<key>ProgramArguments</key>
<array>
<string>~/projects/eod_email/eod</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>StandardOutPath</key>
<string>/var/log/eod-email.log</string>
<key>StandardErrorPath</key>
<string>/var/log/eod-email.log</string>
<key>Debug</key>
<true/>
</dict>
</plist>
Вот ошибка, которую я получаю в /var/log/system.log
:
Jul 22 10:55:52 Nick-Cox com.apple.xpc.launchd[1] (com.wintr.eodemail[7097]): Service could not initialize: 14E46: xpcproxy + 13421 [1402][7D917364-B96E-3F93-B923-A89B5BF5736D]: 0x2
Что я сделал:
- Он имеет те же права доступа, что и остальные файлы в /Library /LaunchDaemons (
-rw-r--r--
, принадлежащий пользователю root) - Я прочитал документы для xpc , но это не сильно помогло.
- Я позаботился о том, чтобы скрипт Node.js был адекватно разрешающим (777) и запускался из командной строки (это так).
- Попробовал абсолютный путь к файлу (
/Users/nickcox/projects/eod_email/eod
) и убедился, что я запустилlaunchctl unload (daemonname)
иlaunchctl load (daemon name)
Это кажется намного более сложным, чем cron, который, по мнению тех Apple, явно устарел. Что мне нужно сделать, чтобы этот скрипт работал по расписанию?