crontab ist sowohl ein Dateiname (/etc/crontab) als auch ein Befehl, mit dem Steuerungsdateien für cron verwaltet werden.
Die Datei /etc/crontab ist die sog. System-Crontab, auf die nur root Zugriffsrechte hat.
Auf vielen Systemen werden Skripte und Programme (oder Links darauf) in den Verzeichnissen /etc/cron.hourly,daily,weekly,monthly automatisch in dem entsprechenden Intervall abgearbeitet.
Eigene Crontabs werden mit dem Befehl crontab -e verwaltet - dazu wird i.d.R. vi aufgerufen. root darf zusätzlich die Crontabs anderer Benutzer editieren, dazu wird der Benutzername mit der Option -u an das Kommando angehängt.
Eine crontab-Datei ist eine Liste von Befehlen, die automatisch zu einem bestimmten Zeitpunkt ausgeführt werden. Eine Zeile kann einen Befehl oder einen Kommentar enthalten. Kommentare werden mit einem # am Zeilenanfang markiert. Vor jedem Befehl stehen fünf Zahlen, mit denen die Aufrufhäufigkeit eingestellt wird:
1. |
Minute |
0-59 |
2. |
Stunde |
0-23 |
3. |
Tag |
1-31 |
4. |
Monat |
1-12 oder Jan, Feb, Mar, ..., Dec |
5. |
Wochentag |
0-7 oder Mon-Sun, wobei 0=Sun, 1=Mon, ..., 6=Sat, 7=Sun |
Für mehrere Werte können Kommata, für Bereiche können Bindestriche und für alles Mögliche kann * verwendet werden.
Beispiele
Eine User-crontab-Datei, die jeden Mittwoch um 5:30 Uhr morgens /usr/sbin/programm startet, sieht so aus:
30 5 * * 3 /usr/sbin/programm
Eine User-crontab-Datei, die jeden Freitag und jeden 13. um 0:30 Uhr morgens /usr/sbin/programm startet, sieht so aus:
30 0 13 * Fri /usr/sbin/programm
Eine User-crontab-Datei, die alle fünf Minuten /usr/sbin/programm startet, sieht so aus:
*/5 * * * * /usr/sbin/programm
Tipps & Tricks
- Wenn die Variable EDITOR gesetzt ist, wird beim Editieren der dort konfigurierte Editor aufgerufen.
EDITOR=mcedit crontab -e
Mit crontab -l kann man sich die aktuelle crontab anzeigen lassen.
Um unerwünschte (Fehler-)Ausgaben zu unterdrücken, kann man eine Fehlerumleitung auf /dev/null verwenden.
/usr/sbin/programm >/dev/null 2>&1
Die Abarbeitung der Cron-Jobs wird meistens in Form von Mails an den User protokolliert.
Bei Debian kann man auch einen Job bei jedem Reboot ausführen lassen. siehe man 5 crontab @reboot. Das kann auch jeder user benutzen um z.B. fetchmail -d .. u.s.w. zu starten.
Für die Ausgabe von Daten in eine Logfile könnte auch das hier evtl. interessant sein:
Befehl 1> logfile-$(date +%Y-%m-%d-%H-%M-%S).log