Was ist bzw. sind Crontab(s)?
Crontabs werden verwendet um sich wiederholende Ereignisse automatisch mehrfach auszuführen.
Ein Beispiel wäre hier ein Backupscript, dass jede Nacht um 01:00 Uhr ablaufen soll.
Um überhaupt erstmal ein Crontab anzulegen müssen wir den entsprechenden Befehl kennen:
# Diese Funktion steht im Normallfall JEDEM User zu crontab -e
anschließend öffnet mittels des vims die Crontab-Datei. In dieser kannst du deine wiederholenden Planungen eintragen.
Der Aufbau der Datei sieht dabei wie folgt aus:
aufbau.txt
# Spalte und Wert Wert von bis Mögliche Angaben # --------------------------------------------------------------- # 1. Spalte: Minuten - 0-59 - *|1,2,3,4|1-3|*/5|1,2,3,56,57,58 # 2. Spalte: Stunden - 0-23 - s. oben # 3. Spalte: Tage - 1-31 - s. oben # 4. Spalte: Monate - 1-12 - s. oben # 5. Spalte: Wochentage - 0-7 - 0&7 = Sonntag # 6. Spalte: Befehl - z.B. einzelne Befehle / Scripte & ...
Wie man erkennen kann, setzt sich die Datei aus 6 Spalten zusammen, die jeweils eine eindeutige Bedeutung haben. Die Spalten müssen dabei von mindestens einem Leerzeichen getrennt werden.
Wie könnte ein Crontab nun aussehen?
beispiel1.txt
# Das backup.sh soll täglich um 01:00 Uhr ablaufen 0 1 * * * /pfad/zum/script/backup.sh
Das oben stehende Script hat also folgende Werte:
Minute: 0
Stunde: 1
Tag: *
Monat: *
Wochentag: *
Befehl: /pfad/zum/script/backup.sh
Das * steht dabei z.B. für jeden Tag, jeden Monat, egal welcher Wochentag.
Hätte das Script nur jeden Freitag ablaufen sollen so hätte die Spalte Wochentag anstatt des * den Wert 5
Selbstverständlich gibt, wie auch in anderen Bereichen, kleine Helfer, die man anstatt der Zahlen-Sternchen-Kombination eintragen kann (Aliase):
crontab-aliase.txt
# @reboot - einmalig beim booten # @yearly - einmal im Jahr - 0 0 1 1 * # @monthly - einmal im Monat - 0 0 1 * * # @weekly - einmal in der Woche - 0 0 * * 0 # @daily - einmal am Tag - 0 0 * * * # @hourly - einmal pro Stunde - 0 * * * *
Desweiteren gibt es die Möglichkeit, innerhalb des Crontabs, spezielle Variablen zu definieren, wie z.B. die Ablaufshell, Mail-Empäfnger und co.:
crontab-variablen.txt
# legt fest, mit welcher Shell die Scripte ausgeführt werden sollen SHELL=/bin/sh # legt den Pfad fest, aus welchem Befehle ohne absoluten Pfad verwendet werden können PATH=/home/julien/bin/:/home/julien/ # legt das entsprechende Homeverzeichnis fest HOME=/home/julien/ # hinterlegt die E-Mail Adresse, welche benachrichtigt wird, sobald ein Cronjob abgelaufen ist MAILTO="root"
Und nun noch ein keines Beispiel mit
beispiel2.txt
MAILTO="root" SHELL="/bin/sh" # 15. jeden Monats um 12:30 xmail.sh Ausgabe in Datei /var/log/xmail.log (SLES) 30 12 15 * * xmails.sh >> /var/log/xmail.sh @weekly /pfad/zum/script/backup.sh
Alle Scripte gibt es, wie gewohnt, zum DOWNLOAD