Linux cron statt WordPress Pseudo-Cron verwenden

In einer WordPress-Installation müssen bestimmte Aufgaben regelmäßig ausgeführt werden. Dazu gehört z.B. die Suche nach Plugin- oder Themen-Updates. Da nicht jeder, der WordPress installiert hat, auf dem Web-Server auch einen “Shell-Zugriff” hat, enthält WordPress eine Art “Pseudo-Cron”. Dabei wird bei einem Zugriff auf die Website überprüft, welche Aktionen laut Zeitplan “fällig” sind und diese werden dann ausgeführt.

Wenn man allerdings einen Shell-Zugriff hat und auf seinem Web-Server eigene Scripts erstellen und ausführen darf, kann man auch den Linux-eigenen cron-Dämon verwenden. Damit hat man dann eine genauere Kontrolle darüber, wann diese wiederkehrenden Aktionen ausgeführt werden sollen.

Die Schritte dazu sind eigentlich ganz einfach. Zunächst einmal braucht man ein Shell-Script, das man direkt in der Linux-Shell erstellen kann. Bei mir sieht dieses Script (als Dateiname habe ich wp-cron.sh verwendet) so aus:

#!/bin/sh
cd /var/www/vhosts/example.org/htdocs
php -c /etc/php5/php-cli.ini -f ./wp-cron.php

Ganz wichtig ist der Verzeichniswechsel in Zeile 2. Damit wp-cron.php die anderen benötigten PHP-Scripte finden, muss man unbedingt zunächst in das WordPress-Installationsverzeichnis wechseln (der Verzeichnisname hier ist natürlich nur ein Beispiel und muss garantiert anders lauten).

In Zeile 3 kann man auf den Parameter -c /etc/php5/php-cli.ini auch verzichten. Dann wird das PHP-Script mit den PHP-Standardeinstellungen ausgeführt. Der Verzeichnis- und Dateiname der ini-Datei ist abhängig von der Installation und der PHP-Version.

Nach dem Speichern des Scripts darf man nicht vergessen, die Rechte so zu setzen, das es auch ausführbar ist (z.B. chmod a+x wp-cron.sh)

Jetzt muss man nur noch dafür sorgen, dass das Shell-Script auch regelmäßig vom cron-Daemon ausgeführt wird. Dazu gibt es mehrere Möglichkeiten. Die bequemste ist sicherlich, das Script einfach in das Verzeichnis /etc/cron.hourly zu kopieren oder dort einen symbolischen Link zu erstellen. Dann wird es stündlich ausgeführt. Möchte man aber mehr Kontrolle haben, dann empfiehlt sich ein crontab-Eintrag.

Wenn alles eingerichtet ist und das Script wie gewünscht funktioniert, kann man den WordPress Pseudo-Cron abschalten. Dazu muss man die Datei wp-config.php editieren und dort folgende Zeile einfügen:

define('DISABLE_WP_CRON', true);

Enthält die wp-config diesen Eintrag schon, muss der Wert nur von “false” auf “true” geändert werden.

Wenn man sehen möchte, welche cron-Aufgaben WordPress wann ausführt, kann man eines der folgen Plugins installieren:

  • wp-cron Dashboard ist ein ziemliches einfaches Plugin, das nur die cron-Aufgaben anzeigt.
  • Core-Control ist ein Plugin, das sich primär an Entwickler richtet. Es zeigt auch die cron-Aufgaben an, kann aber noch ein paar Dinge mehr, wie z.B. alle ausgehenden HTTP-Requests protokollieren.

wptuts+ hat auch einen Artikel zu diesem Thema veröffentlicht, allerdings in englisch.

comments powered by Disqus