CronJob – Aufgaben automatisch ausführen lassen
Die erste Antwort auf die Frage „Was ist ein CronJob?” lautet: Ein „Daemon“. Die zweite Antwort ist: Ein Gott. Zumindest, wenn man sich nur auf die den Bedeutungshintergrund des Namens bezieht. Strenggenommen steht Cron zwar für „command run on notice”, also einen „Befehl, der auf eine Benachrichtigung hin ausgeführt wird“. Die Abkürzung spielt aber ebenso auf Chronos, den altgriechischen Gott der Zeit, an. In Betriebssystemen wie Linux oder macOS läuft der Befehl aber als Cron-Daemon (auch Cron-System genannt).
Die Anspielung auf den griechischen Gott der Zeit ist im Übrigen eine hervorragende Eselsbrücke, um sich Sinn und Zweck eines CronJobs ins Gedächtnis zu rufen. Das Cron-System läuft im Hintergrund eines Betriebssystems und kann zu festgelegten Zeiten automatisiert Aufgaben (Jobs) ausführen. Wenn man also Cron-System und die festgelegte Aufgabe zusammensetzt ergibt sich daraus der Begriff CronJob.
Was genau hinter den möglichst ressourcenschonenden, automatisiert ausgeführten und wiederkehrenden Aufgaben steckt und wie die Technik funktioniert, verraten wir in diesem Artikel.
Was ist ein Cronjob?
Ein CronJob ist eine Aufgabe, die in Betriebssystemen automatisiert abläuft. Für die Ausführung dieser Jobs gibt das System regelmäßig Befehle aus. Dabei kann es sich durchaus um eine einzelne Aufgabe handeln, in der Regel sind es aber mehrere komplexe Aufgaben, also mehrere CronJobs. Der große Vorteil: CronJobs lassen sich stark individualisieren.
Jeder CronJob besteht aus drei Komponenten:
- Skript, das ausgeführt werden soll
- Befehl, der das Skript regelmäßig ausführt
- Aktion oder Ausgabe des Skripts
Ein praktisches Beispiel für den Einsatz sind wiederkehrende Server-Aufgaben. So werden unter anderem der Newsletter-Versand, Statistikerhebungen oder Datenbankreinigungen automatisch durch CronJobs in die Wege geleitet.
Alle Betriebssysteme, die über ein Cron-System bzw. einen Cron-Daemon verfügen, können Cronjobs einsetzen. Darunter fallen alle Unix- und BSD-Systeme (Berkeley Software Distribution) wie macOS oder Linux.
Die Betriebssysteme können CronJobs ganz nach ihrem Motto „Command run on notice” (Befehlsausführung bei Benachrichtigung) in zuvor definierten Zeitabständen ausführen lassen. Routineaufgaben können so völlig eigenständig ablaufen. Neben einem Betriebssystem mit Cron-Daemon müssen folgende Voraussetzungen vorliegen, damit sich CronJobs einrichten lassen:
- dedicated Server
- Secure Shell (SSH) oder für den Zugang einen Telnet-Client
- FTP-Client zum Filetransfer bzw. Upload von Cron-Dateien
Es existieren spezielle Benutzeroberflächen für die einfache Einrichtung von CronJobs sowie Webhosting-Pakete, die vorkonfigurierte CronJobs für Webprojekte bereithalten. Für das Webhosting mit Cronjobs empfehlen wir einen Blick in unseren Cronjob-Hilfeartikel.
Welche Aufgaben erfüllen CronJobs?
Das wohl gängigste Einsatzgebiet von CronJobs ist die Datensicherung. Wollen Sie beispielsweise in regelmäßigen Abständen ein Backup mit tar erstellen, um Daten zu archivieren, sind CronJobs dafür bestens geeignet. Auch die Bereinigung von Datenbanken und die Verarbeitung von Besucherstatistiken auf Websites zählen zu den typischen Einsatzgebieten von CronJobs.
CronJobs können im Zusammenspiel mit einem Content-Management-System automatisch Newsletter verschicken oder Lagerbestände von Onlineshops überprüfen. Sie überwachen Serverauslastungen und können neue Informationen in der Produktbeschreibung – wie zum Beispiel die durchschnittliche Userbewertung – automatisch anpassen.
Die automatisierten Aufgaben von CronJobs sind so vielfältig, dass sie mit Bedacht eingesetzt werden müssen, denn sie benötigen eine große Menge Ressourcen. Deshalb gilt es, bei jedem CronJob abzuwägen, ob er wirklich sinnvoll ist – und vor allem: wann er ausgeführt werden soll. Passende PHP-Skripte sorgen dafür, dass CronJobs nur dann ablaufen, wenn sie andere Abläufe nicht stören.
Die wichtigsten Aufgaben im Überblick:
- Datenbanken bereinigen: Veraltete Datensätze werden entfernt, darunter fallen veraltete Kommentare oder nicht mehr aktuelle Login-Einträge.
- Statistiken erstellen: CronJobs können z.B. täglich den Seitenaufruf einer Seite auf den neuesten Stand bringen.
- RSS-Feed aktualisieren: Hierbei kann die XML-Datei regelmäßig per CronJob neu generiert werden.
- Planung und Veröffentlichung neuer Inhalte
- Newsletter-Versand: E-Mails können über einen bestimmten Zeitraum versendet werden.
- Rechnungen generieren: Rechnungen können – gebündelt und in festen Zeitintervallen – selbstständig erstellt und verschickt werden.
- Datenbank-Backup: Dies bezieht sich überwiegend auf kleinere Datenbanken, die weniger als 20 MB umfassen.
- Machine Learning: Per CronJob können künstliche Intelligenzen zu einer festgelegten Zeit mit neuen Datensätzen versorgt werden.
- Updates: Software-Updates lassen sich zu einer festzulegenden Zeit anbieten.
Wie sieht ein Cronjob-Standardbefehl aus?
Die Möglichkeit zur Individualisierung ist der große Vorteil eines CronJobs. Zur Anpassung von CronJobs gibt es einen Grundstock aus drei Variablen, die jederzeit ausgeführt werden können:
- PATH: zeigt den Pfad an, auf dem nach Befehlen oder einem Skript gesucht wird.
- SHELL: leitet den Befehls-Interpreter an, der ein Skript ausführen soll.
- MAILTO: zeigt die Benutzer, mit denen die Ergebnisse des CronJobs geteilt werden sollen; Standardmäßig ist dies der Abonnent.
Nutzer können Cronjobs mit diesen drei Variablen sowie beliebig vielen weiteren Variablen selbst definieren. In der Regel kommen für die Befehle SHELL-, PHP- und PERL-Skripte zum Einsatz.
Mehr Informationen zu den Kommandos in Linux und Co. erhalten Sie in unserem Grundlagenartikel über Linux-Befehle.
Wie funktioniert ein CronJob?
Damit ein CronJob seine Arbeit verrichten kann, muss im Vorfeld ein Befehl erteilt werden. Der Cron-Daemon arbeitet dann im Hintergrund und führt nicht-interaktive Jobs durch. Unter Windows ist diese Funktion im Übrigen als „Dienste” bekannt.
CronJobs sind grundsätzlich im Ruhezustand und warten auf ihren Befehl: entweder direkt innerhalb des Betriebssystems oder von einem anderen Rechner im Netzwerk aus. Der Befehl erfolgt über eine Cron-Datei (einfache Textdatei), die den Auftrag zu einem spezifischen Zeitpunkt vorgibt.
Definiert und konfiguriert werden CronJobs in einer Tabelle, die auch als Crontab bezeichnet wird. Sie listet den Zeitpunkt und die Befehlsfolge, die ausgeführt werden soll, auf.
Auch das Programm, mit dem sich einzelne Crontabs bearbeiten lassen, hat den Namen „Crontab“.
Die Standard-System-Crontab-Datei „crontab“ ist im Crontab-Verzeichnis /etc/cron.*/ zu finden.
- Flexibel: Hosting, das jedem Website-Traffic standhält
- Verlässlich: Inklusive 24/7-Support und persönlicher Beratung
- Sicher: Kostenloses SSL-Zertifikat, DDoS-Schutz und Backups
Vier kurze Cronjob-Beispiele
Mit dem Programm crontab lassen sich Crontabs bearbeiten. Der hierfür erforderliche Befehl lautet:
crontab -e
Die Syntax ist vergleichsweise übersichtlich. So hat jeder Cronjob folgendes Format:
* * * * * Befehl der ausgeführt werden soll
- - - - -
| | | | |
| | | | +----- Wochentag (0 - 7) (Sonntag ist 0 und 7)
| | | +------- Monat (1 - 12)
| | +--------- Tag (1 - 31)
| +----------- Stunde (0 - 23)
+------------- Minute (0 - 59)
Der Stern * bedeutet hier, dass ein CronJob immer zum jeweiligen Tag, Monat, zur Stunde oder Minute erfolgen soll. Für die Wochentage und Monate können die ersten drei Buchstaben des englischen Namens benutzt werden, wie sun für Sonntag. Angaben zu genauen Zeiträumen können bei dieser Notationsform nicht gemacht werden.
Für genauere Angaben zu den Zeiträumen ersetzt man den Stern durch Ziffern. Setzt man für die erste Stelle 8–10, wird der Befehl in der 8., 9. und 10. Minute ausgeführt. Setzt man hingegen */2, wird der Befehl jede zweite Minute ausgeführt. Beides kann kombiniert werden. Insgesamt sind drei Zeitwerte für die ersten fünf Stellen möglich:
- = Ausführung immer (zu jeder Angabe)
- */n = Ausführung alle n
- n,x,y = Ausführung um/am n,x,y
Beispiel 1: CronJob als Backup ausführen
Damit jeden Morgen um 6 Uhr ein Backup ausgeführt wird, braucht man folgenden Befehl:
0 6 * * * /usr/bin/backup.sh
Beispiel 2: Alle 30 Minuten ein Sound
CronJobs können auch dazu genutzt werden, in regelmäßigen Abständen einen Sound abzuspielen:
*/30 * * * * /usr/bin/play_sound.sh
Beispiel 3: Erinnerungsmails
Erinnerungs-Mails um 8 Uhr und um 18 Uhr verschickt folgender Cronjob:
0 8,18 * * * /usr/bin/send_reminder_mail.sh
Beispiel 4: Danke, Admin
Oder man verwendet CronJob, um nie wieder den Tag des Systemadministrators zu vergessen:
0 0 30 07 * (echo "Danke an alle Systemadmins" | mail -s "Ein Admin schläft nicht, er root." user@domain.xy)