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.

mail

Oder direkt in /var/mail/benutzername.