Wenn der Cronjob nicht funktioniert. Häufige Fehler insbesondere bei domainFACTORY

Technik

Als LAMP Entwickler spreche ich hier auch hauptsächlich von einer Linux- und PHP-Serverumgebung. Beim Anlegen von Cronjobs unterlaufen mir hin und wieder die gleichen Fehler. Dazu kommen die Eigenheiten so mancher Hoster.

Einfacher PHP Cronjob

Fangen wir mit einem einfachen Cronjob auf eine PHP-Datei an. Hier muss man eigentlich nicht viel beachten. Die PHP-Datei sollte selbständig ausführbar sein, dh. etwaige includes sollten solide programmiert sein. Darauf zu achten ist das z.B. die $_SERVER Variable nicht voll belegt ist.

Funktioniert die Datei, wenn sie über das Command Line Interface aufgerufen wird, dann funktioniert sie in der Regel auch im Cronjob. Einfach über SSH und Putty anmelden und die Datei probeweise ausführen.

php pfad/datei.php

Bei domainFACTORY kann bzw. muss man die PHP Version mit angeben, hier sieht der Befehl dann so aus (Beispiel für das aktuelle PHP 7.3):

/usr/local/bin/php7-73STABLE-CLI pfad/datei.php

Einen Überblick über die bei domainFACTORY installierten PHP-Versionen findet ihr durch den Befehl:

ls /usr/local/bin

Komplexerer Cronjob mittels Shell Script

Das direkte Ausführen einer PHP-Datei ist nicht immer das gewünschte Ziel. Manchmal benötigt man ein Shell Script um mehrere Aufgaben in einem Zug zu erledigen. Man könnte z.B. mehrere PHP Dateien hiermit aufrufen oder auch andere Befehle am Server ausführen. Weitere Beispiele wären z.B. tägliche Backups, die mehrere Ordner und die SQL-Datenbank sichern.

Grundsätzlich wird auch hier der Cronjob wieder im Kundenmenü angelegt. Allerdings müssen nun hier drei Punkte beachtet werden.

  1. Die .sh Datei beginnt mit folgender ("Shebang") Zeile #!/bin/bash
  2. Die Datei muss ausführbar sein (Dateiberechtigung): chmod 0700 cronjob.sh
  3. Die Datei muss UNIX Zeilenumbrüche beinhalten

Gerade den letzten Punkt vergesse ich gerne. Wenn ich z.B. den Cronjob mittels Notepad++ erstelle, werden Zeilenumbrüche auf meinem Windows PC auch grundsätzlich im Windows Format angelegt. Die Skripte lassen sich zwar dann ordnungsgemäß im Terminal ausführen, wird der Cronjob der allerdings über das Kundenmenü angestoßen, scheitert dieser jedoch ohne Ausgabe und ohne ersichtlichen Grund. In den allermeisten besseren Editoren kann man allerdings den Zeilenumbruch von Windows auf Linux leicht umstellen. Bei Notepad++ geht das durch Doppelklick rechts unten auf den Bereich Windows CR LF.

Ein Beispiel für eine solche Cronjob Shell Script Datei backup.sh:

#!/bin/bash
env -i /usr/local/bin/php7-73STABLE-CLI /kunden/xxx_yyy/absoluter-pfad/backup-files.php
env -i /usr/local/bin/php7-73STABLE-CLI /kunden/xxx_yyy/absoluter-pfad/backup-db.php

 

Permalink: https://to.ptmr.io/39IK79x