cron / crontab

https://wiki.ubuntuusers.de/Cron/

Der Cron-Dienst ist für Server-Administratoren unverzichtbar. Er ermöglicht dir die Automatisierung von Wartungsaufgaben, wie z.B. die Archivierung von Protokolldateien oder das Entfernen temporärer Daten. Ob eine Aufgabe jedoch tatsächlich korrekt vom Cron-Daemon ausgeführt wurde, wird in der Praxis häufig erst viel zu spät festgestellt. Doch mit wenigen Tricks behältst du deinen Cron-Jobs unter Kontrolle. Lass dich direkt per E-Mail informieren, wenn ein Fehler bei der Cron-Verarbeitung auftritt. Wir zeigen dir, wie es geht. Wie du Cron-Ausgaben an eine E-Mail-Adresse verschickst

In den Standardeinstellungen des Cron-Daemon ist bereits festgelegt, dass der Eigentümer einer Crontab-Datei die Ausgaben des Cron-Daemon per E-Mail erhält. Nur leider gehen diese Nachrichten nur an das Postfach des lokalen Benutzers auf dem Server, der auch ein fiktiver Benutzer oder der administrativen Standardbenutzer „root“ sein kann.

Du kannst die Nachrichten der verschiedenen Benutzer zunächst zentral auf ein lokales Postfach bündeln. Füge dafür im System die Zeile root: account-name in die Datei /usr/lib/asliases ein (für Debian ist es die Datei /etc/aliases).

Wenn du allerdings, so wie ich, nicht täglich einen Blick in die lokale E-Mail-Datei auf deinem Server werfen möchtest, läufst du Gefahr, kritische Fehler nicht rechtzeitig zu bemerken. Du solltest dir alle Fehlermeldungen direkt an deine E-Mail-Adresse weiterleiten lassen. Die Benachrichtigung erfolgt damit unabhängig vom Besitzer der Cron-Tabelle.

Du musst dafür lediglich die Zeile MAILTO=“empfänger@adresse.de“ im Crontab ergänzen. Um die neue Adresse zu aktualisieren, bestätige den Vorgang mit der Eingabe newaliases über die Konsole.

Achtung: Mit dem gleichen Befehl – ohne Angabe der E-Mail-Adresse (MAILTO=““) – lässt sich die Benachrichtigung auch ganz abschalten. So leitest du ausschließlich Fehlermeldungen an deine E-Mail-Adresse weiter

Um das Postfach auch bei einer Flut an Meldungen übersichtlich zu halten, kannst du über eine Einstellung festlegen, dass ausschließlich Fehlermeldungen zu ausgeführten Jobs an dich verschickt werden. Dies erreichst du, indem du Standardausgaben ohne Fehler in ein Logfile schreiben lässt oder ganz einfach nach >/dev/null umleitest. Durch den Ausschluss werden nur noch Fehlermeldungen per E-Mail verschickt. Dieser Befehl funktioniert auch für den Versand der Ausgaben an das lokale E-Mail-Postfach auf dem Server.

Achtung: Mit dem Befehl [cronjob] > /dev/null 2>&1 leitest du sowohl Standard- als auch Fehlerausgaben (Datenkanal 1 und 2) weiter.

Kombiniere diese beiden Befehle nun, indem du dir ausschließlich Fehlermeldungen an deine direkte E-Mail-Adresse schicken lässt. Dazu musst du im Cron-Job oberhalb der Befehle die MAILTO=““ Angabe ergänzen. Für jeden Job lässt sich außerdem die Standardausgabe ins Nirvana leiten:

MAILTO=“ empfänger@adresse.de”

[cronjob] > /dev/null

[zweiter job] > /dev/null

[dritter job] > /dev/null

Abbildung - Cron-Jobs unter Kontrolle

Wenn du die Cron-Jobs so unterscheiden möchtest, dass zum einen alle Ausgaben angezeigt werden, während du für andere Tabellen gar keine Ausgabe erhältst, nutzen du dafür allein die MAILTO=““ Ergänzung und unterscheidest rein nach der Art des Jobs:

MAILTO=“empfänger@adresse.de”

*[cronjob] * [zweiter job]

* [dritter job] MAILTO=“” * [vierter job]

* [fünfter job] * [sechster job]

Cronjobs sind eine tolle Erfindung um diverse Dinge unter Linux zu automatisieren. Wer in einem Cronjob ein Shell Skript ausführt und die gesamte Ausgabe in eine Datei loggen möchte kann das über folgenden Parameter realisieren: > /pfad/zur/logdatei.log 2>&1 Ausgabe von Cronjob in Datei umleiten 1 2

crontab -e 30 22 * * * /usr/scripts/mysql_backup.sh > /usr/scripts/mysql_backup.log 2>&1

/usr/scripts/mysql_backup.log weist an dass die Standard Ausgabe (stdout) des Skripts backup.sh in die Logdatei mysql_backup.log geschrieben wird

2>&1 weist an dass sowohl die Standard Ausgabe (stdout) als auch die Error Ausgabe (stderr) in die Logfile geschrieben werden Bessere Variante:

Der cron Eintrag kann auch wie folgt abgekürzt werden „&>“ steht für „2>&1“: 1

30 22 * * * /usr/scripts/mysql_backup.sh &> /usr/scripts/mysql_backup.log Ausgabe an Log Datei anhängen und nicht neu schreiben

Hinweis: Jede Ausführung des Cronjobs schreibt die Datei mysql_backup.log neu. Möchte man dass die Ausgabe an das Logfile angehängt wird, so muss das Pfeilzeichen > verdoppelt werden: » 1 2

crontab -e 30 22 * * * /usr/scripts/mysql_backup.sh » /usr/scripts/mysql_backup.log 2>&1