Я использовал на первый взгляд простые документы 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, явно устарел. Что мне нужно сделать, чтобы этот скрипт работал по расписанию?
