Sie befinden sich hier: Startseite / Support / Häufige Fragen (FAQ) / Skriptsprachen und Datenbanken / Einrichtung von Cronjobs

Fragen und Antworten

Wie richte ich einen Cronjob ein?

Über Cronjobs können Sie Scripte bzw. andere Programme auf dem Webserver regelmäßig zeitgesteuert aufrufen. Sie können über unterschiedliche Wege auf den Webservern eingerichtet werden. Falls Sie mit dem Unix-Texteditor vi vertraut sind, können Sie Cronjobs am einfachsten per SSH über den Terminal-Befehl crontab -e direkt auf dem Webserver erstellen und bearbeiten. Falls nicht, sollten Sie zur Einrichtung von Cronjobs die im Folgenden beschriebenen Schritte nutzen:

Im ersten Schritt erstellen Sie eine Textdatei, die die zu erledigenden Aufgaben enthält. Im zweiten Schritt wird diese Datei auf dem Webserver hochgeladen und installiert. Letzteres lässt sich sowohl per SSH als auch über ein PHP-Script durchführen.

1. Schritt: Einrichtung der Aufgabenliste

Um dem Cron-Daemon (das ist das Programm, das auf dem Webserver für die Ausführung zeitgesteuerter Scripte sorgt) zu sagen, was er zu tun hat, wird eine Text-Datei benötigt. Im Beispiel nennen wir sie crontab.txt, sie kann aber auch jeden beliebigen anderen Namen bekommen. Die erste Zeile beinhaltet eine E-Mail-Adresse, an die sämtliche Ausgaben des Cronjobs geschickt werden (optional), die folgenden Zeilen definieren die auszuführenden Programme und zeitlichen Intervalle. In folgendem Beispiel soll täglich um 01:00 Uhr früh ein PHP-Script per HTTP aufgerufen werden. Dazu sind folgende Zeilen in der crontab.txt notwendig:

MAILTO="webmaster@beispieladresse.de"
0 1 * * * curl --silent -S "http://www.variomedia.de/index.php"

Die jeweiligen Zeitmuster sind nach folgender Struktur eingeteilt:

Minute:      0 bis 59 oder *
Stunde:      0 bis 24 oder *
Tag:         1 bis 31 oder *
Monat:       1 bis 12 bzw. jan bis dec oder *
Wochentag:   0 (Sonntag) bis 6 (Samstag) oder *

Eine Zeile, wie die folgende bedeutet also, dass das Script zu jeder Minute 33, alle zwei Stunden eines Tages, aber nur Montags-Freitags ausgeführt wird:

33 */2 * * 1-5 curl --silent -S "http://www.variomedia.de/index.php"

2. Schritt: Aktivieren der Aufgabenliste

Falls Sie den Cronjob per PHP einrichten möchten, erstellen Sie im zweiten Schritt bitte eine PHP-Datei mit folgendem Inhalt:

<?php system("dos2unix crontab.txt 2>&1 && crontab crontab.txt 2>&1"); ?>

Speichern Sie die Datei unter einem beliebigen Namen (mit Endung .php) und übertragen Sie beide Dateien, also die crontab.txt und die neu erstellte PHP-Datei, per (S)FTP auf den Webserver. Anschließend rufen Sie die PHP-Datei bitte im Browser auf. Der eingetragene Cronjob wurde dann zur Aufgabenliste des Webservers hinzugefügt und wird regelmäßig zur gewünschten Zeit ausgeführt. Bei Problemen mit der Crontab-Datei wird eine entsprechende Fehlermeldung angezeigt.

Falls Sie den Cronjob per SSH einrichten möchten, laden Sie die Textdatei per (S)FTP auf den Webserver und rufen dann dort den Terminal-Befehl dos2unix crontab.txt && crontab crontab.txt auf.

Cronjobs anzeigen

Bestehende Cronjobs können Sie per SSH über den Terminal-Befehl crontab -l anzeigen lassen, oder über folgendes PHP-Script per Web-Browser:

<?php system("crontab -l 2>&1"); ?>

Hinweis: Im Beispiel wird das Programm "curl" benutzt, um ein PHP-Script per HTTP über den Webserver aufzurufen, die Optionen "--silent -S" unterdrücken unerwünschte Statusmeldungen. Sie können PHP-Scripte auch direkt ausführen, indem Sie diese mittels php und dem Namen des Scripts (z.B. php index.php) aufrufen, dann wird der PHP-Kommandozeileninterpreter in der Standard-PHP-Version Ihres Webservers benutzt. Die Cronjobs werden in Ihrem Benutzerverzeichnis ausgeführt, so dass Sie keine absoluten Pfadangaben (z.B. "/homepages/u12345/index.php") nutzen müssen. Abweichende PHP-Versionen können durch Angabe des vollständigen Pfades zum PHP-Interpreter genutzt werden, z.B. /vrmd/webserver/php52/bin/php-cli für PHP Version 5.2. Nutzen Sie für Cronjobs bitte die Kommandozeilenversion von PHP (php-cli), sonst werden von PHP störende HTML-Elemente in der Ausgabe generiert.

Tipp: Falls Sie von einem bestimmten Cronjob keine Ausgaben per E-Mail wünschen, so können Sie am Ende der Cronjob-Zeile  > /dev/null anhängen, z.B.:

33 */2 * * 1-5 curl --silent -S "http://www.variomedia.de/index.php" > /dev/null

Beachten Sie, dass es unter Unix zwei unterschiedliche Datenströme für die Ausgabe gibt, die Standardausgabe stdout und die Standardfehlerausgabe stderr. Mittels > wird nur die Standardausgabe umgeleitet, die Standardfehlerausgabe wird mittels 2> umgeleitet, und beide Datenströme mittels &>. Ausgaben an dass Nulldevice /dev/null werden verworfen. Dies lässt sich bei Cronjobs ausnutzen, um E-Mail-Benachrichtigungen nur im Fehlerfall zu erhalten. Allerdings nutzen manche Programme die Standardfehlerausgabe nicht nur für Fehlermeldungen, sondern z.B. wie im Falle von curl für eine Fortschrittsanzeige. Solche Ausgaben sind bei Cronjobs unerwünscht und sollten entweder über Kommandozeilenparameter des Programms deaktiviert werden, oder durch eine Umleitung beider Ausgabedatenströme an das Nulldevice (&> /dev/null) unterbunden werden.

Links