Eine kurze Einführung in Cron Jobs
Dieser Artikel ist eine kurze Einleitung in Cron Jobs, Ihrer Syntax und wie man sie erstellt. Ein Cron Job ist eine planmäßige Aufgabe vom System, die zu einer festgelegten Zeit/Datum ausgeführt wird.
1) Linux crontab
Das Kommando um einen Cron Job zu ertstellen/editieren, aufzulisten und zu entfernen, ist crontab. Wenn du es mit der -u option aufrufst, werden die Aufgaben des Users, wessen crontab aufgerufen wird geändert und nicht die des eingeloggten users. Wenn diese Option nicht gegeben ist, prüft crontab ‚dein‘ crontab, z.B. von der Person die das Kommando ausführt.Wenn du als root eingeloggt bist und crontab ohne -u ausführst,dann ist root’s crontab aufelistet/modifiziert/entfernt.Wenn du als exampleuser eingeloggt ist und crontab ohne -u startest, dann ist der crontab von exampleuser‚ gelistet/modifiziert/entfernt.
Beispiele:
crontab -l
listet die Cron jobs von dem Benutzer auf, als der du grade eingeloggt bist:
server1:~# crontab -l
* * * * * /usr/local/ispconfig/server/server.sh > /dev/null 2>> /var/log/ispconfig/cron.log
30 00 * * * /usr/local/ispconfig/server/cron_daily.sh > /dev/null 2>> /var/log/ispconfig/cron.log
server1:~#
crontab -u exampleuser -l
listet alle Cron jobs von exampleuser.
crontab -e
lässt dich Cron Jobs von dem Benutzer als der du grade eingeloggt bist erstellen/modifizieren (Crontab as user). Ich komme im nächsten Kapitel zu der Crontab Syntax.
crontab -u exampleuser -e
lässt dich Cron Jobs von exampleuser erstellen/modifizieren.
crontab -r
Löscht alle Cron Jobs von dem Benutzer als der du gerade eingeloggt bist.
crontab -u exampleuser -r
Löscht alle Cron Jobs von exampleuser.
Wenn du deine Cron Jobs in eine Text Datei geschrieben hast, kannst du die Datei nutzen um Cron Jobs zu erstellen. Zum Beispiel, lasst uns annehmen du hast die Textdatei /tmp/my_cron_jobs.txt erstellt…
nano /tmp/my_cron_jobs.txt
… mit den folgenden Inhalten:
30 00 * * * /path/to/script
Am Anfang der zeile findest Du die daten wann der Cronjob ausgeführt werden soll, gefolgt vom Befehl. Möchtest Du mehrere befehle ausführen, empfielt es sich diese als bash script zusammen zu fassen. Alternativ kannst Du auch meherere befehle in der Zeile mittels Semikolon trennen. Du kannst einen Cron Job aus der Datei wie folgt erstellen:
crontab /tmp/my_cron_jobs.txt
(Oder für exampleuser:
crontab -u exampleuser /tmp/my_cron_jobs.txt
)
Bitte beachte, das wird alle bis jetzt erstellten Cron Jobs überschrieben – wenn du schon einige Cron Jobs erstellt hast, solltest du besser crontab -e benutzen und den neuen Cron Job manuell erstellen.
Wenn Du mehrere Cronjobs in der Linux Crontab anlegen möchtest, dann verwendet für jeden Cron Job eine neue Zeile.
Siehe
man crontab
um mehr über das crontab Kommando zu lernen.
2) Cron Job Syntax
Ein Cron Job besteht aus fdiesen sechs:
<minute> <hour> <day of month> <month> <day of week> <command>
field allowed values
—– ————–
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
Wenn du den Tag der Woche festlegst, beides Tag 0 und Tag 7 stellen beide den Sonntag da.
Ein feld mit einem Sternchen(*), steht immer für das erste bis letzte.
Namen für ‚Monat‘ und ‚Tag der Woche‘ können ebenso in den Feldern stehen. Benutze die ersten 3 Buchstaben des jeweiligen Tages oder Monats(die englische Bezeichnung), z.B. sun oder SUN für Sonntag oder mar / MAR für März..
Lasst uns einen blick auf 2 Cron Jobs aus dem Ersten Kapitel werfen:
* * * * * /usr/local/ispconfig/server/server.sh > /dev/null 2>> /var/log/ispconfig/cron.log
Das meint: führe /usr/local/ispconfig/server/server.sh > /dev/null 2>> /var/log/ispconfig/cron.log einmal pro Minute aus.
30 00 * * * /usr/local/ispconfig/server/cron_daily.sh > /dev/null 2>> /var/log/ispconfig/cron.log
Das meint: führe /usr/local/ispconfig/server/cron_daily.sh > /dev/null 2>> /var/log/ispconfig/cron.log einmal pro Tag um 00:30h.
Der Tag an dem das Kommando ausgeführt werden soll, kann in 2 Felder angegeben werden: Tag des Monats und Tag der Woche: Wenn beide Felder beschränkt sind (z.B. kein *), das Kommando wird wenn eins von den beiden in dem Moment zutrifft.Zum Beispiel, 30 4 1,15 * 5 würde ein Kommando bedeuten, welches um 4:30h am ersten und letzen jeden Monats gestartet werden würde, genau wie jeden Freitag.
Du kannst Schritte benutzen um Cron Jobs zu definieren:
Beispiele:
1,2,5,9 – mein jede erste, zweite, fünfte, und neunte (Minute, Stunde, Monat…).
0-4,8-12 – mein alle (Minuten, Stunden, Monate,…) on 0 bis 4 und von 8 bis 12.
*/5 – meint jede fünfte (Minute, Stunde, Monet, …).
1-9/2 ist das gleiche wie 1,3,5,7,9.
Stufen oder Listen von Namen sind nciht erlaubt(Wenn du Namen anstelle der Nummern für Monate und Tage nimmst- z.B., Mon-Wen ist nicht möglich)
1,7,25,47 */2 * * * Kommando
Meint: starte Kommando jede 2. Stunde in der ersten, siebenten, 25. und 47. Minute.
Anstatt der ersten 5 felder, eine von 8 Speziellen Bedingungen in Crontab Linux auftauchen können:
string meaning
—— ——-
@reboot Run once, at startup.
@yearly Run once a year, „0 0 1 1 *“.
@annually (same as @yearly)
@monthly Run once a month, „0 0 1 * *“.
@weekly Run once a week, „0 0 * * 0“.
@daily Run once a day, „0 0 * * *“.
@midnight (same as @daily)
@hourly Run once an hour, „0 * * * *“.
Du kannst ebenso name=value paare in einem crontab benutzen um variablen von Cron Jobs zu definieren:
# benutze /bin/bash um Kommandos zu starten, anstelle der standart /bin/sh SHELL=/bin/bash # Maile alle Ausgaben zu exampleuser, egal von wem der crontab ist MAILTO=exampleuser # Setze die PATH ariable um sicher zu stellen, das alle Kommandos in einem crontab gefunden werden PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin * * * * * my_command
Bitte beachte: wenn du keine PATH variable in einem crontab gesetzt hast, benutze immer volle Pfade in dem crontab um sicher zu stellen, das das Kommando gefunden wird und angewendet werden kann. Zum Beispiel, anstatt rsync zu schrieben, solltest du besser /usr/bin/rsync schreiben.Benutze which um den vollen Pfad des Programm herauszufinden:
which rsync
server1:~# which rsync
/usr/bin/rsync
server1:~#
Siehe
man 5 crontab
Um mehr über die Syntax on Cron jobs zu lernen.