LaunchDaemon-Skript sendet keine E-Mails

433
stubert

Auf meinem macOS 10.13-System habe ich jede Minute ein Bash-Skript als LaunchDaemon (in / Library / LaunchDaemons) gestartet, um zu prüfen, ob eine virtuelle Ubuntu-Maschine in VMware Fusion ausgeführt wird. (Im Falle eines Stromausfalls oder so etwas muss ich mich als Benutzer anmelden, um die VM wieder zum Laufen zu bringen.) Ich habe Postfix für die Weiterleitung an meinen E-Mail-Anbieter eingerichtet. Mein Skript funktioniert gut, wenn es in einem Vordergrundprozess ausgeführt wird, entweder als normaler Benutzer oder als Root-Benutzer, was dazu führt, dass ich per E-Mail oder nicht per E-Mail benachrichtigt wird. Wenn es jedoch von launchd ausgeführt wird, sendet es mir keine Mail. Ich habe /var/log/mail.log mit einem Tailed versehen und sehe nichts anderes als die üblichen Daemon-Start- und Exit-Nachrichten. Ich habe außerdem überprüft, dass der Rückgabestatus des E-Mail-Befehls 0 ist, indem er in einer Protokolldatei angezeigt wird. Irgendwelche Vorschläge wie, was los ist oder wie man weiter debuggt?

Meine Liste in / Library / 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> 

Mein Skript:

#!/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 Antwort auf die Frage

0
Gordon Davisson

Wenn ein von Launchd verwalteter Prozess (wie Ihr Skript) beendet wird, werden durch Launchd alle verbleibenden Unterprozesse "bereinigt" (dh beendet). Ich bin mir der Details nicht sicher, aber anscheinend kann dies etwas enthalten, das / usr / bin / mail im Hintergrund abbrennt, um die Nachricht zu senden. In meiner Erfahrung tötet launchd es normalerweise, bevor es die Nachricht beendet. Lösung: weisen Sie launchd an, verbleibende Unterprozesse nicht zu töten, indem Sie dies dem Startdämon plist hinzufügen:

<key>AbandonProcessGroup</key> <true/> 
Ah ja, das macht den Job. Vielen Dank. stubert vor 6 Jahren 0