29.032016

Ein PHP-Script per Cronjob zeitgesteuert ausführen

Oft ist es praktisch zu bestimmten Uhrzeiten ein PHP-Script automatisch ausführen zu lassen. Dieses kann klassischerweise z.B. Backup- oder lästige Aufräumarbeiten erledigen. Die Ausführung eines solchen zeitgesteuerten Ereignisses nennt man Cronjob. Dieser kann im Grunde alles tun, was man auch in der Shell-Konsole eingeben könnte.

Zugang zur Crontabelle

Erkundigt euch zunächst wie ihr bei eurem Webspace Cronjobs anlegen könnt. Wenn ihr die entsprechenden Rechte besitzt und euch per Konsole einloggen könnt, kann man mit dem Befehl crontab -e die Tabelle editieren, oder mit crontab -l die Einträge auflisten. Andere Varianten sind das euer Anbieter ein Interface im Kundencenter zur Verfügung stellt, oder ihr nur eine .txt Datei bearbeiten dürft.

Was ist ist eine Crontabelle

Im Grunde ist eine Crontabelle, nichts anderes wie eine Text-Datei, in der pro Zeile ein Befehl steht, der ausgeführt werden soll. Jedem Befehl ist zudem eine Zeitangabe vorangestellt.

Beispiel:

30 23 * * * /order/unterordner/script.pl

Dieser Eintrag bedeutet: führe jeden Tag um 23:30 Uhr das Script script.pl im genannten Pfad aus. Die ungenutzten * sind Platzhalter für Angaben wie Tag, Monat, etc. Schaut euch am besten mal http://crontab.guru/ an und spielt dort einwenig mit dem "random" Link um zu sehen was alles möglich ist. Grundsätzlich stehen die Sternchen aber für folgendes:

* * * * *     /ordner/unterordner/script.pl
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └──── Wochentag (0-7)
│ │ │ └────── Monat (1-12)
│ │ └──────── Tag des Monats (1-31)
│ └────────── Stunde (0-23)
└──────────── Minute (0-59)

Ein PHP-Script ausführen

Um ein PHP-Script auszuführen, müssen wir nun Cron die Angabe dafür mitgeben, dass es sich um ein solches handelt. Diese ist normalerweise /usr/bin/php oder schlicht php. Das ganze schaut dann wie folgt aus (man beachte das Leerzeichen zwischen der Angabe des Scriptpfades und dem referenzieren von PHP):

30 23 * * * /usr/bin/php /ordner/unterordner/script_name.php

Als Alternative, anstatt /usr/bin/php anzugeben, kann man in die erste Zeile des Scriptes, vor dem öffnenden <?php-Tag , einen Shebang schreiben: #!/usr/bin/php

Greift unser Script auf andere Ordner zu, zum Beispiel weil wir in PHP fopen benutzen um eine Log.txt zu schreiben, so ist es evtl. erforderlich zunächst in den Ordner des Scripts zu wechseln, bevor wir dieses ausführen - im Idealfall ist euer Script aber so geschrieben, dass es die kompletten Pfadangaben zu Dateiaufrufen enthält. Zunächst kann der Wechsel in den Script-Ordner aber die Lösung sein, sollte euer Script bei manuellen Aufrufen funktionieren, aber nicht beim Aufrufen durch den Cronjob.  Die Angabe des Script-Pfades verketten wir jedenfalls einfach mit && :

30 23 * * * cd /ordner/unterordner/ && /usr/bin/php /ordner/unterordner/script_name.php

Zu den Pfaden

Liegt euer Cronjob in einem vom Web erreichbaren Verzeichnis, oder habt ihr gar keine andere Möglichkeit in ein anderes Verzeichnis eures Webspaces zu gelangen, so ist der Pfad so oder so ähnlich:  /var/www/username/ordner/
Erkundigt euch im Zweifel bei eurem Anbieter.

Fazit

Cronjobs die PHP ausführen sind kein Hexenwerk. Hat man erst einmal herausgefunden wie man bei seinem Webspace diesen konfiguriert und wo man diese ablegen kann, sind sie ein extrem nützliches Tool.