Automatisierte Anweisungen mit cron
¶
Der cron-Dienst gehört bei Debian/Ubuntu/LinuxMint zum Standard-Umfang. Der Dienst ist also standardmäßig aktiv, auch wenn man ihn als normaler Linux-Benutzer zunächst wohl gar nicht bewusst wahrnimmt.
Die Anweisungen, die cron
zu bestimmten Zeiten ausführen soll, werden in
einer so genannten „Crontab“ abgelegt. Hierbei handelt es sich letztlich um eine
einfache Text-Datei, die allerdings eine spezielle Syntax hat. Jeder Benutzer
eines Linux-Systems, auch der SuperUser root
, kann eine solche Crontab
anlegen. Hierzu genügt folgende Anweisung:
# Cron-Tabelle editieren:
crontab -e
Durch die Option -e
wird die entsprechende Datei mit dem Standard-Texteditor
geöffnet.
In einer Cronjob-Datei können einzelne Zeilen durch ein #
-Zeichen am
Zeilenbeginn auskommentiert werden; diese Zeilen werden vom Cron-Dienst
ignoriert. Alle übrigen Zeilen stellen Anweisungen dar, die zeitgesteuert
ausgeführt werden sollen.
Jede einzelne Zeile steht für eine einzelne Anweisung. Als Format muss dabei folgende Syntax beachtet werden:
minute stunde tag monat wochentag benutzer anweisung
# Beispiel:
* * * * * benutzername echo "Hallo Welt!" > /dev/null
Die einzelnen Spalten in einer solchen Crontab haben folgende Bedeutung:
Mittels der ersten fünf Stellen, im obigen Beispiel jeweils mit
*
gekennzeichnet, werden Zeitangaben festgelegt; die einzelnen Stellen werden durch (ein oder mehrere) Leerzeichen voneinander getrennt.Handelt es sich um eine Crontab eines normalen Benutzers, die ohne SuperUser-Rechte mittels
crontab -e
editiert wird, so entfällt diebenutzer
-Spalte.Bei systemweit relevanten und nur mit SuperUser-Rechten veränderlichen Crontabs (wie beispielsweise der Datei
/etc/crontab
oder den in/etc/cron.d/
abgelegten Crontabs) muss hingegen angegeben werden, von welchem Benutzer-Account aus die jeweilige Anweisung ausgeführt werden soll.Als letzter Eintrag wird in jeder Zeile die auszuführende Shell-Anweisung angegeben. Beinhaltet diese Leerzeichen, so muss sie in Anführungszeichen gesetzt werden.
Die fünf Stellen für die Zeitangaben haben folgende Bedeutung:
- Stelle: Minuten-Angabe (
0
bis59
, oder*
für „in jeder Minute“) - Stelle: Stunden-Angabe (
0
bis23
, oder*
für „in jeder Stunde“) - Stelle: Tages-Angabe (
0
bis31
, oder*
für „an jedem Tag“) - Stelle: Monats-Angabe (
1
bis12
, oder*
für „in jedem Monat“) - Stelle: Wochentags-Angabe (
0
bis7
, oder*
für „an jedem Wochentag“)
Bei der Angabe eines Wochentags steht 0
beziehungsweise 7
für Sonntag,
1
für Montag, usw. Der obige Beispiel-Eintrag würde also bedeutet, dass die
angegebene Anweisung einmal in jeder Minute ausgeführt werden würde.
Eine zusätzliche Option für die Verwendung von *
ist es, beispielsweise mit
einer Minuten-Angabe von */2
eine Ausführung in jeder zweiten Minute zu
bewirken.
Beispiele:
Ein Backup-Skript einmal täglich um 3:00 Uhr nachts ablaufen lassen:
0 3 * * * /path/to/my/backupscript.sh
Jeden dritten Tag prüfen, ob neue Paket-Quellen vorhanden sind (funktioniert nur mit SuperUser-Rechten!):
0 0 */3 * * root "apt update"
Eine Erinnerung zum 1. April um 6:30 Uhr morgens als Email verschicken:
30 6 1 4 * (echo "Gut aufpassen!" | mail -s "April, April!" mail@adresse.de)
(Dieser Cronjob setzt voraus, dass das Paket
mailutils
installiert ist.)
Cronjobs sind insbesondere für Backups sehr nützlich, beispielsweise in Verbindung mit rsync.
Links