Ein cron-Job ist eine geplante Aufgabe, die vom Linux-Dienst „cron“ automatisch zu festgelegten Zeitpunkten ausgeführt wird, beispielsweise zur Erstellung eines Backups, zur Ausführung eines Wartungsskripts oder für zeitgesteuerte Aufgaben einer Webanwendung. Die Liste dieser Aufgaben wird als „crontab“ bezeichnet.
Bearbeiten der crontab
Die zu Ihrem Benutzerkonto gehörenden geplanten Aufgaben können Sie mit dem folgenden Befehl bearbeiten:
crontab -e
Auflistung der bereits eingerichteten Aufgaben:
crontab -l
Als root-Benutzer können Sie auch die crontab eines anderen Benutzers bearbeiten: crontab -u felhasznalo -e. Seien Sie vorsichtig mit dem Befehl crontab -r: Er löscht alle Aufgaben ohne Rückfrage (die Taste r befindet sich auf der Tastatur neben der Taste e). Bei einem Test unter AlmaLinux 10 wurde die gelöschte crontab in der Datei „~/.cache/crontab/crontab.bak“ gesichert, von wo aus sie mit dem Befehl „crontab ~/.cache/crontab/crontab.bak“ wiederhergestellt werden kann; auf anderen Systemen wird eine solche Sicherung möglicherweise nicht erstellt. Wenn Sie cPanel-Hosting nutzen, können Sie die Aufgaben auch über die Benutzeroberfläche hinzufügen, siehe: Erstellen eines Cron-Jobs in cPanel.
Die Syntax von crontab
Jede Zeile besteht aus fünf Feldern und dem auszuführenden Befehl:
* * * * * parancs
│ │ │ │ │
│ │ │ │ └── hét napja (0–7, a 0 és a 7 is vasárnap)
│ │ │ └──── Monat (1–12)
│ │ └────── hónap napja (1–31)
│ └──────── Stunde (0–23)
└────────── Minute (0–59)
In den Feldern können die folgenden Bezeichnungen verwendet werden:
*: jeder Wert;,: Auflistung, zum Beispiel1,15(am 1. und 15. des Monats);-: Bereich, zum Beispiel1-5(Montag bis Freitag);/: Intervall, zum Beispiel*/15(alle 15 Minuten).
Praxisbeispiele
0 3 * * *Uhr: täglich um 3 Uhr morgens*/15 * * * *alle 15 Minuten0 0 1 * *: am ersten Tag jedes Monats um Mitternacht0 9 * * 1: jeden Montag um 9 Uhr30 8-18 * * 1-5: an Werktagen zwischen 8 und 18 Uhr, jeweils zur 30. Minute jeder vollen Stunde
Ein vollständiger Beitrag:
0 3 * * * /usr/bin/php /home/felhasznalo/mentes.php >> /home/felhasznalo/mentes.log 2>&1
Dieses führt das PHP-Skript täglich um 3 Uhr morgens aus und schreibt die Ausgabe zusammen mit den Fehlermeldungen an das Ende der Protokolldatei.
Anstelle der fünf Felder können auch Abkürzungen verwendet werden: @reboot (beim Systemstart), @hourly, @daily, @weekly, @monthly.
Die systemweite crontab
Neben der Crontab des Benutzers enthalten auf dem eigenen Server auch die Datei „/etc/crontab“ und das Verzeichnis „/etc/cron.d/“ Aufgaben. In diesen sind neben den Zeitangaben ein sechstes Feld angegeben: der Benutzer, in dessen Namen der Befehl ausgeführt wird, zum Beispiel „0 4 * * * root /usr/local/bin/takaritas.sh“.
Wenn der Cron-Job nicht ausgeführt wird
Der häufigste Grund dafür ist, dass der Befehl manuell funktioniert, über Cron jedoch nicht. Die Ursachen hierfür sind:
- Zugriffspfade: Cron läuft in einer minimalistischen Umgebung, der
PATHenthält nur wenige Verzeichnisse (im Test unter AlmaLinux 10:/usr/bin:/bin:/usr/sbin:/sbin; das Verzeichnis/usr/local/binsowie das eigene Verzeichnis~/binsind also nicht enthalten). Geben Sie stets den vollständigen Pfad an (/usr/bin/php, nichtphp). Den genauen Speicherort zeigt der Befehl „which php“ an. - Das Zeichen „
%“: In der Crontab steht „%“ für einen Zeilenumbruch; daher muss es beispielsweise in einem Befehl wie „date +%F“ in der Form „\%“ geschrieben werden. Im Test führte der Cron aus der Zeile „date +%F > /tmp/kimenet.txt“ nur den Teil „date +“ aus (im Protokoll: „CMDEND (date +)“), die Datei wurde gar nicht erst erstellt; in der Form „date +\%F“ lief der Befehl einwandfrei ab. - Berechtigungen: Das Skript muss ausführbar sein (
chmod +x szkript.sh), siehe den Artikel über Dateiberechtigungen. - Zeitzone: Cron wird entsprechend der Zeitzone des Servers ausgeführt. Überprüfen Sie dies mit dem Befehl „
timedatectl“.
Die Ausführungen werden im Systemprotokoll festgehalten: Unter AlmaLinux und Rocky Linux in der Datei „/var/log/cron“, unter Debian und Ubuntu mit dem Befehl „journalctl -u cron“ bzw., sofern rsyslog installiert ist, in der Datei „/var/log/syslog“. Es empfiehlt sich, die Ausgabe des Auftrags in eine Datei umzuleiten, wie das obige Beispiel zeigt, damit im Fehlerfall nachvollziehbar ist, was geschehen ist.
Bei WordPress-Websites empfiehlt es sich, anstelle des integrierten WP-Cron einen echten Cron-Job zu verwenden. Mehr dazu erfahren Sie in unserem Artikel zum Thema „Ersetzen des WordPress-Cron“.