Crontab
Der Cron Daemon und dessen Konfigurationsdatei Crontab dient auf Unix Systemen zum Zeit basierten Ausführen von Befehlen. So ist es möglich Aufgaben im System zeitlich zu planen und zu einer zuvor festgelegten Zeit automatisch auszuführen. Das klingt zwar recht kompliziert, die Erstellung eines neuen Scriptaufrufs ist dabei denkbar einfach. Zu finden ist crontab bei einem Debian basierten Linux folgendermaßen:
sudo nano /etc/crontab
Crontab
Zeit spielt bei Rechnern eine sehr wichtige Rolle. Die korrekte Zeit wurde früher manuell eingestellt und über eine Batterie am Mainboard auch bei ausgeschaltetem Zustand am Laufen gehalten. Heute holt sich ein Computer die aktuelle Zeit über NTP aus dem Internet. Linux stellt mit dem Cron Daemon und Crontab ein sehr gutes Tool zur Verfügung mit dem man recht einfach zeitgesteuerte Aufgaben anlegen kann.
Konfiguration
Konfiguriert kann crontab mit neuen Einträgen in die Tabelle.Geöffnet wird die Konfigurationsdatei üblicherweise über folgenden Befehl:
crontab -e
Hier kann man zuerst die Zeit eingeben (Minute, Stunde, Tag, Monat, Jahr). Ein * kennzeichnet hier immer ein mehrmaliges Ausführen. Der Eintrag 0 0 * * * würde also bedeuten, dass der Eintrag jedes Jahr, jedes Monat, jeden Tag und immer um 0:00 Uhr ausgeführt wird. Also täglich. Hier kann man noch zahlreiche andere Kombinationen angeben. Nähere Infos liefert der Artikel auf Wikipedia. Oder das hier.
Nach der Definition der Uhrzeit wird das Kommando eingegeben, dass ausgeführt werden soll. Dieses ist das selbe, dass man auch in der Shell eingeben würde. In meinem Fall (siehe Screenshot) würde zur jeden vollen Stunde ein PHP Sicherungsskript ausgeführt werden.
Anacron
Möglicherweise gibt es bereits Einträge in der Tabelle die einen Befehl mit zum Beispiel /usr/bin/anacron ausführen. Üblicherweise sind bereits 4 Einträge definiert. /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/monthly. Ist dies der Fall, dann gibt es auch die hier genannten Ordner. Was hat es damit auf sich?
Alle Scriptdateien die in diesen Ordnern liegen werden aufgerufen. Alles im Ordner cron.daily wird folglich einmal am Tag aufgerufen. Und wann? Diese Information kann man aus der crontab Datei auslesen. Aber Achtung! Hier geht es um Anacron. Anders als bei Cron muss der Computer nicht rund um die Uhr laufen. Das heißt folgendes: würde das cron.daily um 0:15 Uhr ausgeführt, der Computer ist aber über die Nacht ausgeschaltet, so würde dieses Script bei cron niemals ausgeführt werden. Anacron arbeitet hier asynchron. Das heißt, das Script wird ausgeführt, sobald wie möglich. Somit würde der Aufruf nach dem nächsten Start nachgeholt.
Cron Daemon
Der Cron Daemon läuft immer im Hintergrund und wartet auf die Ausführung des nächsten Eintrags in der Tabelle. Sollte Cron nicht laufen, so kann er mit
sudo service cron start
gestartet werden. Alternativ zum Starten kann man ihn auch mit „stop“ stoppen oder mit „restart“ neu starten.
Problemlösung
Sollten Scripts nicht wie erwartet ausgeführt werden, so sollte man als erstes in den Logs nachsehen. Die Logausgabe von Cron ist unter
/var/log/syslog
zu finden. Hier werden aber zahlreiche Dinge gelogged. Um nur die Logs von Cron anzuzeigen hilft der folgende Befehl:
grep CRON /var/log/syslog
Die Log Nachrichten sind sehr gut und fast selbsterklärend. Bei Problemen hilft auch eine Suche im Internet weiter.
Fazit
Mit Crontab plant man in einem Unix ähnlichen Betriebssystem wie Linux oder Mac OSX das automatische Ausführen von Skripten und Programmen. Das wird bei Servern oft eingesetzt um automatische Sicherungen zu erstellen und Routineaufgaben wie das Löschen von Logdateien durchzufühen. Als Webentwickler kommt man auch immer wieder mit Crontab in Berührung um seine eigenen Skripte periodisch auszuführen.
Wofür verwendest du Crontab?