Stellen Sie sicher, dass der Cron-Daemon weiterhin ausgeführt wird

Stellen Sie sicher, dass der Cron-Daemon weiterhin ausgeführt wird

Wenn auf einerDebian 7Server (Wheezy), der in einer gehosteten VM und einem aktuellen cronDaemon 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 runzu verwendenden Programms softlimitzum Aktivieren von Core-Dumps.
  • Bearbeiten des restartSkripts (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 restartdie 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

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

daemontoolsSie 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 , cronddass die -nOption 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/crondSkript durch ein Skript ersetzen, das crond -ninnerhalb einer While-Schleife aufgerufen wird. In diesem Fall müssen Sie jedoch geschickt vorgehen und das pidSkript für die spätere Verwendung speichern.

verwandte Informationen