Zurück

Cronjobs

Was ist ein Cronjob und wie lege ich ihn an? Dies erfahren Sie in diesen Artikel.

Cronjobs sind Befehle die zeitgesteuert ausgeführt werden. Nehmen wir an, das Sie jeden Abend um eine bestimmte Uhrzeit ein Backup Ihrer Daten anlegen wollen, oder an einen Geburtstag erinnert werden wollen, oder Sie haben ein Script geschrieben, das den Inhalt aller Textdateien indexiert und dieses soll nun stündlich laufen. Für all diese Aufgaben können Sie einen Cronjob einrichten.

Was passiert denn dabei? Auf jedem Linuxsystem gibt es Systemdienste, die immer im Hintergrund laufen. Diese nennt man Dämonen. Ein solcher Dämon ist der Cron-Dämon. Dieser prüft jede Minute im Hintergrund, aufgrund der Crontab, ob ein Cronjob gestartet werden soll. Die Crontab ist eine einfache Textdatei, in der ein Benutzer festlegen kann, zu welcher Zeit, welchen Befehl Cron ausführen soll.

Die Crontabs eines Benutzers werden in der Datei /var/spool/cron/tab/user gespeichert. Diese Datei sollte jedoch keinesfalls direkt editiert werden. Würde man die Datei direkt editieren, könnte es passieren, das man gerade am editieren ist, während Cron startet. Um dies zu vermeiden gibt es einen speziellen Befehl zum Editieren der Crontab-Datei. Dieser lautet (wie sollte es anders sein): crontab. Der Befehl crontab kennt die Parameter -e, -l und -r. Mit crontab -e kann man seine Crontab-Datei editieren. Der Parameter -l listet alle vorhandenen Crontabs auf und -r löscht die Crontab-Datei. crontab -e ruft dabei den Standardeditor des Systems zum editieren auf. Sollten Sie für sich nichts anderes eingestellt haben, so ist dies der Vi.

Ich habe also crontab -e eingegeben und wie lautet nun die Sytax meines Cronjobs? Grundsätzlich gilt: Pro Cronjob eine Zeile. Am Anfang der Zeile gebe ich den Zeitpunkt für den Cronjob ein, danach den Befehl der ausgeführt werden soll. Der Zeitpunkt gliedert sich in: Minute Stunde Tag Monat Wochentag. Ein * steht für einen beliebigen Zeitpunkt. Wenn ich also will das der Befehl testcron jeden Tag um 16:15 Uhr ausgeführt wird gebe ich ein:

15 16 * * * testcron

Jede Spalte wird also durch einen einfachen Leerschritt getrennt. Was aber wenn ich eine Aktion nicht zu einem bestimmten Zeitpunkt, sondern in einem bestimmten Intervall durchführen möchte? In diesem Fall hilft mir die Schreibweise */n weiter. Konkret: Möchte ich den Befehl testcron, alle 10 Minuten laufen lassen schreibe ich:

*/10 * * * * testcron

Für den Benutzer Root gibt es noch ein paar Besonderheiten beim einrichten von Cronjobs: Root darf stellvertretend für jeden Benutzer einen Cronjob anlegen. Speziell bei Root kommt daher in der Syntax des Crontab-Files noch eine weitere Spalte vor: Zwischen der Zeit und dem Befehl, schiebt sich noch eine Spalte mit dem Benutzernamen, unter dem der Befehl ausgeführt werden soll. Die generelle Crontab-Datei für das System, das nur Root bearbeiten darf, findet sich nicht unter /var/spool/cron/tab, sondern unter /etc/crontab. Daneben gibt es in /etc bei vielen Distributionen noch die Verzeichnisse cron.hourly, cron.daily etc. In diesem Fall finden sich in der /etc/crontab nur ein paar Einträge, die etwa alle Inhalte des cron.hourly-Ordners jede Stunde ausführen lassen etc. In diesem Fall kann Root ein Script das stündlich ausgeführt werden soll, einfach in den Ordner cron.hourly schieben, ebenso bei einem Script das täglich ausgeführt werden soll in die cron.daily etc.

Abschließend sei noch angemerkt, daß unter KDE ein grafisches Tool zur Verfügung steht um die Crontab-Einträge zu bearbeiten. Das Tool heißt Kcron und wird durch das KDE-Admin Paket installiert.

Zurück

Zurück nach oben
Shell mit Kommandoprompt