Это первый раз, когда я использую launchd, поэтому я многое не знаю.
Немного справочной информации.
Я настроил все, чтобы иметь возможность использовать команду mail для отправки электронных писем с моим gmail. Написал скрипт bash (IPSend.sh), используя ifconfig, grep и mail. Запуск сценария вручную, так как любой пользователь, включая root, работает отлично и отправляет электронное письмо на указанный адрес электронной почты. Скопировал скрипт в каталог / usr / local / bin / с правами доступа rwxr-xr-x, а скрипт -rwxr-xr-x @ все равно root: wheel. Создал файл plist и скопировал его в / Library / LaunchDaemons (корневое колесо -rw-r - r - @ 1 918 25 декабря 16:01 com.fer.ip.plist), отладил его с помощью plutil -lint, пока результат не был получен ХОРОШО.
Когда я запускаю команду load /Library/LaunchDaemon/com.fer.ip.plist (как root), я не получаю никаких ошибок, электронное письмо не отправляется, и журнал показывает что-то вроде:
25 декабря 16:18:00 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"): Регулирование респауна: начнется через 6 секунд
25 декабря 16:18:06 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"): Возобновление регулирования: начнется через 10 секунд
25 декабря 16:18:37: --- последнее сообщение повторено 2 раза --- 25 декабря 16:18:37 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"): Регулирование респауна: начнется через 10 секунд
25 декабря 16:18:37 dbe4b6a01 com.apple.launchd [1] (0x7f9170659600.anonymous.sendmail [20303]): не удалось add kevent для PID 20303. Выгрузится при возврате MIG
25 декабря 16:18:37 dbe4b6a01 com.apple.launchd [1] (0x7f9170659600.anonymous.sendmail [20303]): выгрузка PID 20303 при возврате MIG.
25 декабря 16:18:47 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"): Регулирование респауна: начнется через 10 секунд 25 декабря 16:19:00: --- последнее сообщение повторено 1 раз ---
25 декабря 16:19:00 dbe4b6a01 com.apple.launchd [1] ("com.fer.ip"): Регулирование респауна: начнется через 7 секунд
Причина, по которой я говорю «что-то в этом роде», заключается в том, что иногда я не получаю «Не удалось добавить kevent для PID» или он появляется раньше.
Я полностью потерян. Понятия не имею, что означает «Не удалось добавить kevent для PID» или почему он не работает как процесс запуска, когда работает вручную. Пожалуйста помоги!
Вот мой сценарий изменения моего адреса электронной почты:
#!/bin/sh
ifconfig | grep -o -E [0-9]+[.][0-9]+[.][0-9]+[.][0-9]+ |grep -v "127" |grep -v "255" | mail -s "iMac" myemail@isp.com.xx
и вот мой файл 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.fer.ip"</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/IPSend.sh</string>
</array>
<key>OnDemand</key>
<false/>
<key>StartInterval</key>
<integer>60</integer>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/test.stdout</string>
<key>StandardErrorPath</key>
<string>/tmp/test.stderr</string>
</dict>
</plist>
И стандартные ошибки, и стандартные файлы вывода всегда пусты
grep
трехкратного трубопровода просто используйте:ifconfig | awk '/broadcast/{print $2}'
Ответы:
Я не знаю, почему я пропустил это в первый раз, но, рассмотрев вашу проблему только сейчас, я заметил несколько несоответствий в файле plist, которые вполне могут быть проблемой. Я думаю, что это решит вашу проблему.
Надеюсь, что это поможет!
F.
источник
Несколько предложений:
В листе поменяй:
Перепроектируйте сценарий оболочки, чтобы сообщить о состоянии на стандартный выход или сбой и сообщить о стандартной ошибке. Нравится:
Надеюсь, что это поможет.
источник