Cron (Ableitung von Chronos = Zeit): Im Hintergrund werden in regelmäßigen Abständen Befehle/Skripte aufgerufen und ausgeführt. Dies können Anwendungen wie bspw. das automatische Versenden von E-Mails, das Abholen von Log-Dateien, die Erstellung von Backups oder die Optimierung einer Datenbank sein. In Tabellen (sog. Crontabs) sind diese Befehle gespeichert und werden von dort aus ausgeführt.
Einrichtung von Cronjobs
Um ein Script als Cronjob auszuführen, muss dieses von außen über das Internetprogramm erreichbar sein. Damit wird es möglich sowohl PHP als auch Perl und Python Scripts laufen zu lassen.
Cronjobs lassen sich in den Webspace-Einstellungen -> Crontab einrichten.
Zeitsteuerung von Cronjobs
Das Ausführungsinterval von Cronjobs lässt sich mit 5 Werten einstellen. Dabei kann man als größtes Interval einen jährlichen Cronjob definieren.
Der erste Wert gibt die Minute an, die folgenden die Stunde, den Tag, den Monat und den Wochentag.
Beispiele:
*/5 * * * *
führt einen Cronjob alle 5 Minuten aus. Also immer dann, wenn sich die aktuelle Minute ohne Rest durch 5 teilen lässt.
0 * * * *
führt einen Cronjob immer dann aus, wenn die Minute 0 ist, also immer zur vollen Stunde.
0 3 * * *
führt einen Cronjob in der Nacht um 3:00 aus, z.B. um ein Backup zu machen oder die Datenbank aufzuräumen.
Es ist auch möglich Cronjobs nur an bestimmten Wochentagen auszuführen. Dabei ist ist Montag = 1 und Sonntag = 7
0 3 * * 0
führt einen Cronjob immer um 3:00 in der Nacht vom Samstag auf Sonntag durch.
Die individuelle Zeitsteuerung kann über das Dropdown-Menü unter „intervall“ über „individuell“ konfiguriert werden.
Befehl für die Cronjobs
Cronjobs werden extern wie eine Webseite aufgerufen. Dazu wird wget verwendet. Der Server führt dann eine Anfrage an die Webseite durch wie ein Besucher.
Der einfachste Weg:
wget "https://www.domain.xy/cron/script.php" -O -
Hierbei wird nach der Ausführung des Cronjobs eine E-Mail mit der Rückgabe verschickt. Dies ist also auch eine gute Methode über Fehler informiert zu werden.
Ohne E-Mail Benachrichtigung:
wget "https://www.domain.xy/cron/script.php" -O - &> /dev/null
Mittels „&>/dev/null“ wird hier die komplette Ausgabe des Scripts verworfen.
Achtung! Aus Sicherheitsgründen ist es nicht möglich, Cronjobs mit HTTP zu nutzen. Auch eine unverschlüsselte Adresse wird mit https:// eingetragen.
Absicherung von Cronjobs
Es ist außerdem ratsam Scripts mit einem Kennwort zu sichern, damit niemand von außen die Cronjobs aufrufen kann. Der einfachste Weg dafür ist es, dem PHP-Script ein Kennwort zu geben.
<?php if (!isset($_GET['pass'])) die(); if ($_GET['pass'] != "EINSEHRLANGESPASSWORT") die(); ?>
Der Code wird über den Anfang des Scripts geschrieben. „EINSEHRLANGESPASSWORT“ wird gegen ein persönliches Kennwort ersetzt.
Hinweis: Sonderzeichen und Umlaute sollten für das Kennwort im Cronjob vermieden werden, da es zu Problemen führen kann. In dem Fall empfiehlt sich ein langes Kennwort aus Buchstaben und Zahlen.
Die korrekte Einrichtung des Passwortschutzes kann wie folgt getestet werden, indem die URL manuell im Browser aufgerufen wird.
https://www.ihredomain.xy/cron/script.php?pass=EINSEHRLANGESPASSWORT
Um Script als Cronjob aufzurufen wird folgender Befehl verwendet:
wget "https://www.domain.xy/cron/script.php?pass=EINSEHRLANGESPASSWORT" -O - &> /dev/null