Cronjob laeuft nicht - was tun
Cronjobs die lokal funktionieren aber als Cron nicht laufen sind ein klassisches Ärgernis.
Meistens liegt es an einem von drei Dingen: Umgebungsvariablen, Pfade oder Berechtigungen.
Zuerst: läuft cron überhaupt?
sudo systemctl status cron
Output irgendwo hinschreiben
Der häufigste Fehler ist dass man nie sieht was der Cron tut.
Erstmal die Ausgabe in eine Datei umleiten.
* * * * * /usr/bin/php /var/www/script.php >> /tmp/cron.log 2>&1
2>&1 leitet auch Fehlermeldungen in die Datei. Danach in /tmp/cron.log nachschauen.
Pfade sind das Problem Nummer 1
Im Cron gibt es keine PATH-Variable wie im Terminal. Absolute Pfade verwenden.
Nicht so.
* * * * * php script.php
Sondern so.
* * * * * /usr/bin/php /absoluter/pfad/zum/script.php
Wo php liegt herausfinden.
which php
Berechtigungen prüfen
Der Cron läuft unter dem Benutzer dessen crontab man bearbeitet.
Dateien und Verzeichnisse auf die das Script zugreift müssen für diesen Benutzer lesbar bzw. schreibbar sein.
sudo crontab -e # root-Cron crontab -e # eigener Benutzer
Cron-Syntax schnell testen
crontab -l
Zeigt alle aktiven Jobs. Ein Tipp: crontab.guru ist praktisch um die Zeitangabe zu überprüfen.
Mails lesen
Cron schickt bei Fehlern standardmäßig eine lokale Mail. Nachschauen mit.
Oder direkt in /var/mail/benutzername.