Сценарий LaunchDaemon не отправляет почту

283
stubert

В моей системе MacOS 10.13 у меня есть скрипт bash, запускаемый как LaunchDaemon (в / Library / LaunchDaemons) каждую минуту, чтобы проверить, работает ли виртуальная машина Ubuntu в VMware Fusion. (В случае отключения электричества или чего-то еще, я должен войти в систему под своим именем, чтобы снова запустить виртуальную машину.) У меня есть Postfix, настроенный для ретрансляции моему провайдеру электронной почты. Мой скрипт отлично работает при запуске в процессе переднего плана, либо в качестве обычного пользователя, либо в качестве пользователя root, что приводит к тому, что я отправляю или не отправляю мне электронные письма соответствующим образом, но при запуске launchd он просто не отправляет мне почту. Я следил за /var/log/mail.log и не вижу ничего, кроме обычных сообщений запуска и выхода демона. Я также проверил, что статус возврата почтовой команды равен 0, отражая ее в файле журнала. Любые предложения о том, что происходит, или как отлаживать дальше?

Мой список в / Библиотека / LaunchDaemons:

<?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.planetexpress.checkvmware</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/checkvmware</string> </array> <key>StartInterval</key> <integer>60</integer> <key>RunAtLoad</key> <true/> </dict> </plist> 

Мой сценарий:

#!/bin/bash  touch /tmp/checkvmware checkline="/path/to/vm.vmx" vmwareline=$(pgrep -if "$checkline") if [[ -z $vmwareline ]]; then /usr/bin/mail -s "Alert: Ubuntu on VMware isn't running" bbrodriguez@planetexpress.com <<< 'Are you even logged in, bro?' mystatus=$? echo "Status of mail command: $mystatus" >> /tmp/checkvmware.log fi 
0

1 ответ на вопрос

0
Gordon Davisson

Когда завершается процесс, управляемый launchd (например, ваш скрипт), launchd "очистит" (т.е. убьет) любые оставшиеся подпроцессы. Я не уверен в деталях, но, очевидно, это может включать в себя то, что / usr / bin / mail запускается в фоновом режиме для отправки сообщения. По моему опыту, launchd обычно убивает его до того, как заканчивает отправку сообщения. Решение: скажите launchd не уничтожать оставшиеся подпроцессы, добавив это в plist демона запуска:

<key>AbandonProcessGroup</key> <true/> 
Ах, да, это делает работу. Благодарю. stubert 6 лет назад 0