
Wenn auf einerDebian 7Server (Wheezy), der in einer gehosteten VM und einem aktuellen cron
Daemon ausgeführt wird, weist einen Fehler auf, sodass Cron ohne ersichtlichen Grund nicht mehr ausgeführt wurde. Da dies seitdem nur einmal passiert ist, ist es schwer zu debuggen.
Wie können Sie sicherstellen, dass Cron bei einem erneuten Absturz automatisch neu gestartet wird und eine E-Mail-Benachrichtigung sendet?
Antwort1
Sie können jederzeit denüberwachenProjekt.
Sie können die Dienste neu starten und sie damit am Laufen halten.
Wenn es für Sie keine Möglichkeit gibt, Ihren Cron zu reparieren, wie in den Kommentaren vorgeschlagen.
Antwort2
Könnte ich nicht so etwas wie „Daemontools“ ausführen, um den Prozess zu überwachen und neu zu starten?
Ja, tatsächlich; und auf manchen Maschinen mache ich genau das. Das "so etwas wie daemontools" ist eigentlich der Service-Manager vondas Nosh-Paketaber andere Mitglieder der Daemontools-Familie sind mehr als in der Lage, GNU Cron zu überwachen. (Vixie Cron ist eine andere Sache, aber Sie haben Debian gesagt.)
GNU Cron ist einer der einfachsten Dienste, die unter der Dienstverwaltung der Daemontools-Familie ausgeführt werden können. Gerrit Papes Run-Script-Sammlung enthält ihn, ebenso wie die Service-Bundle-Sammlung, die das Nosh-Toolset begleitet.
Allerdings kann ich mich nicht erinnern, dass ich GNU Cron jemals neu starten musste.weil es abgestürzt ist.
Andererseits geht es beim Servicemanagement nicht nur um den automatischen Neustart. Es istAuchüber Protokollierung und Ressourcenkontrolle, beides Themen, die für die Aufgabe derDiagnose warumGNU Cron stürzt bei Ihnen ab.
Zur Diagnose des Problems sind unter anderem folgende Punkte zu berücksichtigen:
- Bearbeiten des
run
zu verwendenden Programmssoftlimit
zum Aktivieren von Core-Dumps. - Bearbeiten des
restart
Skripts (oder gleichwertig) …- … um zu prüfen, ob der Dæmon beendet oder mit einem Signal beendet wurde.
- … um Core Dumps zu sammeln.
- … um Warnungen auszulösen und Benachrichtigungen per E-Mail zu versenden. (Ich habe einmal ein Skript eingerichtet, das mir bei einem Absturz/Abbruch
restart
die letzten Zeilen per E-Mail zuschickt .)log/main/current
- … um die Neustartratenbegrenzung anzupassen.
- Lesen des individuellen Protokolls von GNU Cron und des eigenen Protokolls des Service-Managers, um zu bestimmen, wann und wie oft der Dæmon neu gestartet wurde und welche Fehlermeldungen (falls vorhanden) er ausgegeben hat.
Weiterführende Literatur
- Jonathan de Boyne Pollard (2015).Die Daemontools-Familie. Häufig gestellte Fragen.
- Gerrit Pape.Debian-Pakete
- https://unix.stackexchange.com/a/283132/5132
- https://unix.stackexchange.com/a/283580/5132
Antwort3
Da man nicht crond
über überwachen kann crond
, würde ich es so machen:
echo "while true; do if ! (ps aux |grep crond |grep -v grep); then /etc/init.d/crond start; fi && sleep 5; done &" >> /etc/rc.local
Antwort4
daemontools
Sie müssen , runit
, , usw. nicht installieren supervise
. So nützlich diese Tools auch sind, sie decken Anwendungsfälle ab, die Sie im Allgemeinen nicht nur für cron benötigen. Was Sie einfach brauchen, können Sie problemlos mit init erledigen. Fügen Sie zu /etc/inittab hinzu:
cron:2345:respawn:/usr/sbin/crond -n
Stellen Sie zunächst sicher , crond
dass die -n
Option unterstützt wird. Dadurch wird das Programm angewiesen, nicht zu verzweigen und im Vordergrund zu bleiben. ** Stellen Sie sicher, dass Sie Crond in den RC-Skripten deaktivieren **.
/usr/lib/lsb/remove_initd /etc/init.d/crond
Wenn Crond aus irgendeinem Grund Ausgaben an stdout oder stderr ausgibt, müssen Sie ein Wrapper-Skript schreiben, um mit dieser Ausgabe umzugehen, und das Wrapper-Skript starten. Halten Sie das Skript einfach:
#!/bin/sh
#crond-wrapper.sh
exec crond -n &>>/var/log/crond
Alternativ können Sie das vorhandene gepackte init.d/crond
Skript durch ein Skript ersetzen, das crond -n
innerhalb einer While-Schleife aufgerufen wird. In diesem Fall müssen Sie jedoch geschickt vorgehen und das pid
Skript für die spätere Verwendung speichern.