Cronjobs mit Silverstripe: Tutorial in drei Schritten
Automatisiere Deine Arbeit mit Cronjobs
Die Anforderungen an Webanwendungen und Datenbanken werden zunehmend anspruchsvoller. Verwaiste Warenkörbe müssen gefunden und gelöscht oder das Social Web nach Aktualisierungen durchsucht werden. Das alles kann man natürlich manuell erledigen. Doch wer möchte schon alle paar Stunden den entsprechenden Teil der Webseite manuell aufrufen um diese Jobs zu erledigen? Ich jedenfalls nicht.
Leider ist es nicht immer so einfach möglich, den entsprechenden Code auf dem Webserver über Cronjobs auszulösen. Gerade diese Bereiche sind meist nur über ein entsprechendes Login zu erreichen. Und die Einstellungsmöglichkeiten beim Provider sind meist darauf beschränkt, zu bestimmten Zeiten und in bestimmten Intervallen URLs aufzurufen.
Kommandozeilen PHP schafft Abhilfe
Ein einfacher Weg, dieses Problem zu umgehen, ist die Kommandozeile. Die Kommandozeile gibt Euch die Möglichkeit, PHP Code nicht über den Browser, sondern direkt über das PHP des Servers auszuführen. Allerdings ist die Kommandozeile meist nur verfügbar, wenn Ihr einen kompletten Server im Zugriff habt. Bei einem Shared Hosting Paket wird das schon schwieriger.
Genau dieses Problem hatte ich bei mehreren Silverstripe-Installationen, die ich zum Glück alle bei meinem Lieblingsprovider bytecamp am Laufen habe.
Silverstripe bietet von Haus aus einen Wrapper (cli-script.php), der Aufrufe an das Framework (Sapphire) über die Kommandozeile entgegennehme und verarbeiten kann. Damit das alles auch funktioniert, sind wenige Handgriffe nötig.
- Umgebungsvariablen hinterlegen
- Kommandozeilen-Script mit entsprechenden Anweisungen anlegen
- Aufruf des Kommandozeilen-Scripts beim Provider einstellen
Umgebungsvariablen hinterlegen
Damit Silverstripe auch weiß, wie es die über eine URL aufgerufenen Kommandozeilen-Befehle zu verarbeiten hat, muss man die entsprechenden Pfadzuweisungen explizit dem System mitteilen. Dies geschieht über die Datei _ss_environment.php, die in das Root-Verzeichnis gelegt wird:
<?php
global $_FILE_TO_URL_MAPPING;
//$_FILE_TO_URL_MAPPING['/path/to/yoursiteroot'] = 'http://your.domain.com';
$_FILE_TO_URL_MAPPING['/home/www/XX/YY/ZZ'] = 'http://www.meinbeispiel.de';
?>
Dabei werden auf der linken Seite die absoluten Dateipfade zum Rootverzeichnis auf dem Server gesetzt und auf der rechten Seite der URL-Pfad in das Rootverzeichnis des Webservers. Auf diese Weise können Dateiaufrufe entsprechend umgeleitet werden.
Kommandozeilen-Script erstellen
Das eigentliche Kommandozeilen-Script wird dann über den PHP Befehl "shell_exec()" ausgeführt. Als Parameter werden der lokale Pfad auf das PHP des Webservers, der Pfad auf das cli-script von Silverstripe und als letztes der zu verwendende Funktiosaufruf mitgegeben. Die anschließende Ausgabe per Echo dient nur der Kontrolle.
Ein Beispiel (test.php):
<?php
/*
* unset _SERVER['HTTP_HOST']
* so that cli-script won't bother
*/
putenv('HTTP_HOST');
$output = shell_exec('/usr/local/php-5.2/bin/php -f sapphire/cli-script.php QuarterHourlyTask');
echo "<pre>$output</pre>";
?>
Der Aufruf des Scriptes über http://www.meinbeispiel.de/test.php leitet dann den Kommandozeilen-Aufruf an das cli-script weiter, von wo es dann auch ausgeführt werden kann. Der direkte Aufruf über den Browser gibt Euch die Ergebnisse der aufgerufenen Funktionen zur Kontrolle zurück.
Um das Ganze noch etwas abzusichern, könnte man die Datei test.php in ein Unterverzeichnis legen und dieses per .htaccess mit einem Passwort schützen. Die Einstellungen für die Cronjobs der meisten Provider erlauben es, den Usernamen und das Passwort beim Aufruf mit zu geben.
Cronjob einrichten
Zuletzt muss nur noch der Cronjob im Konfigurationsmenü des Providers eingestellt werden. Dazu wird einfach die Url des aufzurufenden Scripts angegeben (z.B.: http://www.meinbeispiel.de/test.php), der Intervall des aufrufes (stündlich, täglich, monatlich) und der Intervall selbst (1,2,3, etc.). Fertig!
Jetzt könnt Ihr Euch zurücklehnen und wichtige Aufgaben in Angriff nehmen.
Ihnen hat der Artikel gefallen? Dann empfehlen Sie den Artikel doch weiter:
Kommentare
-
Thank you for this important information
Erstellt von replica rolex, 26/03/2013 4:49am (vor 3 Monat)
Geben Sie doch auch einen Kommentar ab
RSS Feed für die Kommentare auf dieser Seite | RSS feed für alle Kommentare

