nachdem ich das Gefühl habe, dass Cronjobs oft nicht richtig verstanden werden und immer wieder das Gleiche gefragt wird, habe ich mich entschlossen ein kurzes HowTo dazu zu schreiben... Ich arbeite mit einem Debian System, es dürfte aber nur geringe Abweichungen zu anderen Distributionen geben. Ergänzungen, Korrekturen und Tipps sind natürlich gern gesehen ;-)
1. Was ist ein Cronjob / Welche Möglichkeiten habe ich mit Cronjobs?
Cronjobs sind Skripte oder Aufgaben, die zu einem bestimmten Zeitpunkt vom System ausgeführt werden sollen. Das System eignet sich deshalb besonders gut für Aufgaben die immer wieder anstehen und die kein Eingreifen des Users verlangen (Bspw. Backups, Logs auswerten oder Trafficinformationen verschicken). Cronjobs sind ungefähr das Selbe wie die "Geplanten Tasks" unter Windows :roll:
2. Wie erstelle ich Cronjobs
Die einfachste Möglichkeit vorweg - wem das bereits genügt braucht den Rest nicht mehr zu lesen:
Wenn man ein Script jeden Tag ausführen will, kopiert man es einfach in den Ordner /etc/cron.daily, für einmal pro Woche in /etc/cron.weekly und einmal pro Monat in /etc/cron.monthly und das war's bereits. (Auf die Rechte achten 'chmod 700 script.sh'!)
Wem das nicht genügt hat zwei verschiedene Möglichkeiten Cronjobs einzutragen. Einerseits in die Datei /etc/crontab, die aber nur vom User root geändert werden kann oder mit dem Befehl 'crontab -e'. Zuerst die Möglichkeit über die Datei /etc/crontab. Das Format eines neuen Crontabs sieht folgendermassen aus:
3. Wie muss ein Cronjob aussehen?
Code: Select all
Minute | Stunde | Tag des Monats | Monat | Tag der Woche | User | BefehlMinute: 0-59
Stunde: 0-23
Tag des Monats: 1-31
Monat: 1-12
Tag der Woche: Nützlich wenn z.B. immer Dienstags ein Script gestartet werden soll. Möglich ist 0-7, wobei 0 und 7 jeweils der Sonntag ist.
User: Der Benutzername unter dem das Script ausgeführt werden soll. Bspw root
Befehl: Konsolen-Befehl oder Scriptname der ausgeführt wird. Bspw /root/scripts/backup.sh
Wie sieht ein solcher Aufruf nun komplett aus?
Code: Select all
0 15 * * * root /root/scripts/backup.shWie man hier sieht werden die Werte die egal sind mit einem Stern (*) gekennzeichnet, in diesem Fall ist es egal was für ein Tag ist, in welchem Monat wir uns befinden und auch ob wir Dienstag oder Donnerstag haben ;-)
Ã?ber den Befehl crontab -e funktioniert das ganz ähnlich, es fällt nur die Spalte User weg, da das Script unter dem Benutzer laufen wird, der den Cronjob eingerichtet hat.
Bsp:
Code: Select all
0 15 * * * /root/scripts/backup.shListen: Mit , getrennte Werte (ohne Abstand dazwischen) Bspw: 8,12 um ein Script um 8 und 12 Uhr auszuführen.
Zahlenfolgen: Mit - getrennte Werte Bspw. 8-12 um das Script um 8,9,10,11 und 12 Uhr auszuführen.
Stufen: */Stufe, Wird genutzt um z.B.: "alle fünf Minuten" oder "jeden 2. Tag" zu erstellen. Bspw: */2 um das Script alle zwei Stunden auszuführen.
4. Besondere Aufrufe
Für besondere Ereignisse kann man anstatt der 5 Zeitdaten eines der Folgenden einsetzen:
@reboot Ausführen beim Systemstart
@yearly Einmal pro Jahr
@monthly Einmal pro Monat
@weekly Einmal pro Woche
@daily Einmal am Tag
@hourly Einmal pro Stunde
Bsp:
Code: Select all
@reboot root /root/scripts/backup.sh5. Output und Fehlermeldungen
Schreibt man in die /etc/crontab eine Zeile wie
Code: Select all
MAILTO=rootWenn man dies bei keinem seiner Scripte will, löscht man einfach die Zeile mit dem MAILTO= aus /etc/crontab.
Will man nur bei bestimmten Scripts keine Meldung fügt man > /dev/null an den Aufruf an, damit werden die Meldungen die vom Script gesendet werden ins Nichts geleitet ;-)
Beispiel:
Code: Select all
0 15 * * * root /root/scripts/backup.sh > /dev/nullBeispiel:
Code: Select all
0 15 * * * root /root/scripts/backup.sh > /dev/null 2>&1Um das Ganze noch etwas verständlicher zu machen einige Beispiele:
Code: Select all
* * * * * root /root/scripts/backup.shCode: Select all
*/1 * * * * root /root/scripts/backup.shCode: Select all
10 * * * * root /root/scripts/backup.shCode: Select all
0 10,12 * * * root /root/scripts/backup.shCode: Select all
0 0 2-4 * * root /root/scripts/backup.shCode: Select all
40,50 13 */2 4-8 * root /root/scripts/backup.sh > /dev/null 2>&1Code: Select all
*/2 * * * * root /root/scripts/backup.sh > /dev/nullCode: Select all
0 10 * * 1 root /root/scripts/backup.shIch hoffe das Ganze ist halbwegs verständlich rübergekommen ;)
so long
static
