Wenn ein Cron-Job abstürzt, bleiben normalerweise einige Fehlermeldungen im Protokoll.
Wir führen ein Shell-Skript und ein Java-Programm mit Cron-Job aus. Kürzlich haben wir etwas Seltsames aus dem Protokoll herausgefunden. Offensichtlich ist das Programm entweder abgestürzt oder beendet worden, weil es eine Programmsperre gibt, die wir beim Initialisieren des Programms festgelegt haben und die nicht freigegeben wurde. Wir vermuten, dass das Programm beendet wurde, weil das Protokoll des Programms die Zielmeldung nicht zeigte.
Wer kann den Job möglicherweise beenden und wie kann ich per E-Mail benachrichtigt werden, wenn ein Cron-Job tot ist?
BEARBEITEN: Ich möchte nicht, dass die Crontab-Methode E-Mails empfängt, da nur jede Standardausgabe an die E-Mail gesendet wird. In meinem Fall gibt es viele andere Systemausgaben von anderen Programmen, da einige von ihnen nicht log4j verwenden oder von einem Shell-Skript wiedergegeben werden. Da das System viele Benutzer enthält, können nicht alle Benutzer die Standardausgabe ihres Programms verwalten.
|| echo $?
Abstürze / Kills gemäß der Frage erkennen müssten , nur um Nicht-Signal-Exits zu erkennen, die still sind, aber EXIT_SUCCESS (0) nicht zurückgeben. Letztere sind ungewöhnlich, da sie auch nicht angezeigt werden, wenn Sie den Befehl über eine interaktive Shell ausgeführt haben. (Könnte nützlich sein, um nach seltsamen Java-Programmen oder etwas anderem zu suchen)./path/to/myprogram
den Job haben und die Shell die allgemeine Optimierung des Befehls "Ausführen des letzten Befehls" implementiert und das Programm aufgrund eines Signals stirbt, wird keine Nachricht gedruckt. Die einzige Spur des Todes ist die Benachrichtigung von cron, die den Beendigungsstatus des Programms enthält.echo "sleep 10" | bash
. Es stellt sich heraus, dass sich dies anders verhält als beidesbash -c 'sleep "10"'
- was ich hätte testen sollen - und zBecho "sleep 10" | dash
was ich auch hätte testen sollen.