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.

Das könnte dich auch interessieren …