Cron-Jobs erledigen die stille Arbeit hinter Websites und Servern: Backups, Updates, Importe, Rechnungen, Cache-Warm-ups und Aufräumarbeiten. Wenn sie funktionieren, merkt es niemand. Wenn sie stehen bleiben, merkt es auch niemand – bis ein Backup fehlt oder ein Rechnungslauf nie stattgefunden hat.
Warum Cron-Jobs wichtig sind
Cron plant Befehle so, dass sie automatisch zu festen Zeiten oder in festen Intervallen laufen. Das spart Zeit und beseitigt das Risiko, dass jemand eine Aufgabe vergisst. Es bedeutet aber auch, dass kritische Arbeit wie nächtliche Backups von einem Scheduler abhängt, der niemandem Bescheid gibt, wenn etwas schiefgeht.
Häufige Gründe für verpasste Cron-Jobs
Serverausfall. Ist der Server zur geplanten Zeit aus oder startet gerade neu, läuft der Job nicht.
Syntaxfehler. Ein falsches Feld im Zeitplan-Ausdruck kann dazu führen, dass der Job zur falschen Zeit oder nie läuft.
Fehlkonfiguration. Falscher Benutzer, falsches Arbeitsverzeichnis oder ein Job in einer Crontab, die nie geladen wird.
Unterschiedliche Umgebungen. Cron läuft mit einer minimalen Umgebung. Ein Befehl, der in Ihrer Shell funktioniert, kann unter Cron scheitern, weil PATH oder andere Variablen fehlen.
Überschneidungen und Timeouts. Ein Job, der länger läuft als sein Intervall, kann mit dem nächsten Lauf kollidieren. Eine maximale Laufzeit im Monitor des Jobs zeigt Ihnen, wenn ein Lauf zu lange dauert.
Fehler erkennen und beheben
Beginnen Sie mit den Logs. Das Systemlog (oft /var/log/syslog oder das Cron-Log Ihrer Distribution) zeigt, ob Cron den Job gestartet hat. Die eigene Ausgabe des Jobs zeigt, was danach passiert ist.
Typische Fehler und was sie bedeuten:
command not found: Verwenden Sie absolute Pfade oder setzen Sie PATH am Anfang der Crontab.
permission denied: Prüfen Sie die Dateirechte und unter welchem Benutzer der Job läuft.
syntax error: Prüfen Sie den Zeitplan-Ausdruck und die Anführungszeichen im Befehl.
Leiten Sie die Ausgabe in eine Logdatei um, damit Fehler eine Spur hinterlassen:
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Cron-Jobs überwachen
Logs helfen nur, wenn jemand sie liest. Monitoring macht aus einem lautlosen Fehler einen Alarm. Am zuverlässigsten ist ein Heartbeat: Der Job sendet nach Abschluss eine Anfrage an eine Monitoring-URL. Kommt die Anfrage nicht innerhalb der erwarteten Zeit an, erhalten Sie einen Alarm.
Mit den Cron-Monitoren von Uptimecheck pingt der Job eine eindeutige URL per GET oder POST an. Der Monitor übernimmt den Crontab-Zeitplan in Ihrer Zeitzone, akzeptiert Start- und End-Pings in einem Monitor, alarmiert, wenn ein Lauf seine maximale Laufzeit überschreitet, und kann den Exit-Code und die Ausgabe des Jobs erfassen. Fehlt ein Ping, geht der Alarm per E-Mail, Slack, Microsoft Teams, Discord, Google Chat, Mattermost, Telegram, PagerDuty, ntfy, Pushover, Webhook oder als Push-Benachrichtigung aufs Smartphone raus, in jedem Tarif. Die Schritt-für-Schritt-Anleitung finden Sie in Cron-Jobs überwachen.
Best Practices für die Zeitplanung
Planen Sie aufwendige Jobs außerhalb der Stoßzeiten.
Verteilen Sie Jobs, die dieselben Ressourcen nutzen, zeitlich, statt alle um Mitternacht zu starten.
Verwenden Sie eine Sperre (zum Beispiel flock), damit sich ein langsamer Lauf nicht mit dem nächsten überschneidet.
Überprüfen Sie die Zeitpläne, wenn sich Ihre Anwendung ändert.
Cron auf mehreren Servern betreiben
Gibt es denselben Job auf mehreren Servern, legen Sie fest, wo er laufen soll, und stellen Sie sicher, dass er nur einmal läuft. Eine zentrale Zeitplanung oder eine Sperre in einem gemeinsamen Speicher hilft dabei. Geben Sie jedem Job einen eigenen Heartbeat, damit Sie wissen, welcher Server seinen Lauf verpasst hat.
Cron-Jobs absichern
Cron-Jobs haben oft Zugriff auf Datenbanken, Backups und Zugangsdaten.
Beschränken Sie, wer Crontabs bearbeiten darf.
Halten Sie Geheimnisse aus der Crontab-Zeile selbst heraus und legen Sie sie in geschützten Dateien oder der Umgebungskonfiguration ab.
Überprüfen Sie Jobs regelmäßig und entfernen Sie die, die Sie nicht mehr brauchen.
Ressourcen effizient nutzen
Lassen Sie Jobs nur so oft laufen wie nötig und halten Sie die Befehle schlank. Ein Bericht, den niemand stündlich liest, kann auch täglich laufen.
Testen, bevor Sie sich darauf verlassen
Führen Sie einen neuen Job zunächst von Hand unter demselben Benutzer aus, prüfen Sie die Ausgabe und planen Sie ihn erst dann ein. Richten Sie gleichzeitig den Heartbeat ein, damit Sie schon ab der ersten Nacht wissen, ob er gelaufen ist.
Fazit
Cron-Jobs sind unverzichtbar und unsichtbar – genau deshalb brauchen sie Monitoring. Beheben Sie die häufigen Ursachen, protokollieren Sie die Ausgabe und versehen Sie jeden wichtigen Job mit einem Heartbeat.
Testen Sie Uptimecheck 14 Tage kostenlos, ganz ohne Kreditkarte.