HSE WebSoccer-Sim: Jobs über Cron ausführen

Die regelmässigen Hintergrundaufgaben, wie die Spielberechnung, Aktualisierung von Statistiken und Ausführung von fälligen Spielertransfers werden über Jobs ausgeführt. Diese Starten Sie im Standardfall über das AdminCenter unter Jobs. Ohne besondere Konfiguration wird dabei eine Anfrage an den Server gesendet, die praktisch unendlich läuft.

Davon abgesehen, dass ein Job spätestens dann immer abbricht, wenn beispielsweise der Server neu gestartet wurde, sind einige Server auch so konfiguriert, dass unendlich lange Anfragen nicht gestattet sind. In diesem Fall laufen die Jobs nur wenige Minuten.

Zuverlässig ist hingegen die Einrichtung von Cronjobs. Dies sind Prozesse, die über das Betriebssystem in einem konfigurierten Zeitintervall (in diesem Fall) ein PHP-Skript aufrufen. Wird der Server neu gestartet, starten auch die Cronjobs automatisch mit. Mit Cronjobs müssen Sie die Ausführung der Hintergrundaufgaben quasi nicht mehr überwachen.

Fast jeder Webhoster bietet Cronjobs an, jedoch oft nur gegen einen monatlichen Aufpreis. Und manche Anbieter erlauben keine Cronjobs, die minütlich ausgeführt werden. Bitte kontaktieren Sie dazu Ihren Webhoster, falls Sie Ihren Server nicht selbst verwalten.
top

Cronjob-Skript anlegen

Für jeden Job müssen Sie ein eigenes Skript anlegen. Wir empfehlen, zumindest den Spielesimulationsjob als Cronjob einzurichten!

Vorab müssen Sie die Kennung (ID) des Jobs kennen. Diese finden Sie in der Software in der Datei /admin/config/jobs.xml.

Die ID für den Simulationsjob ist beispielsweise sim.

Als nächstes legen Sie eine beliebig benannte PHP-Datei für das Skript an, z.B. "executeSimJob.php".

Aus Sicherheitsgründen sollte diese Datei nicht über einen Web-Browser aufrufbar sein. Legen Sie die Datei auf dem Server am besten ein Ordnerlevel über den öffentlich zugänglichen Dateien an.
Hinweis: Der Ordner mit den öffentlich zugängliche Dateien heisst üblicherweise /html oder /htdocs. Dort befindet sich dann auch Ihre index.html- oder index.php-Datei.

Kopieren Sie folgenden Inhalt in diese neue Datei:

<?php 
// Pfad zur Websoccer-Installation angeben
define("BASE_FOLDER", __DIR__ ."/pfad/zum/websoccer");

// geben Sie hier die ID des Jobs an.
// Beispiel für Ausführung der Spielesimulation: "sim"
$jobId = "sim";

// den Rest können Sie einfach übernehmen
define("JOBS_CONFIG_FILE", BASE_FOLDER . "/admin/config/jobs.xml");
include(BASE_FOLDER . "/admin/config/global.inc.php");
$xml = simplexml_load_file(JOBS_CONFIG_FILE);
$jobConfig = $xml->xpath("//job[@id = '". $jobId . "']");
$jobClass = (string) $jobConfig[0]->attributes()->class;
$i18n = I18n::getInstance($website->getConfig("supported_languages"));
$job = new $jobClass($website, $db, $i18n, $jobId);
$job->execute();
?>

Hinweis zum korrekten Pfad, welcher in der ersten Zeile angegeben werden muss: Angenommen die Ordnerstruktur auf Ihrem Server ist wie folgt:

Dann müsste die Zeile wie folgt aussehen:

define("BASE_FOLDER", __DIR__ ."/htdocs/websoccer");
top

Cronjob ausführen

Von "Cronjobs" redet man grundsätzlich nur in der Unix/Linux-Welt. Die meisten Webserver benutzen ein solches Betriebssystem. Benutzen Sie einen Windows-Server, müssten Sie einen "geplanten Task" anlegen. Bitte kontaktieren Sie uns im Zweifelsfall. Nachfolgend wird auf die Einrichtung von Cronjobs unter Unix/Linux eingegangen.

In der Regel bietet Ihr Webhoster eine eigene Eingabemaske für die Einrichtung von Cronjobs an. Je nachdem wie benutzerfreundlich diese gestaltet sind, muss man den Zeitpunkt der Ausführung in einem bestimmten Format angeben. Dabei geben Sie in genauer Reihenfolge an, in welcher Minute, welcher Stunde, welchem Tag, Monat und Wochentag der Job ausgeführt werden soll. Das "Wildcard"-Zeichen * bedeutet "irrelevant" und die Zeichenkombination */ deutet ein Intervall an. Für eine minütliche Ausführung (wie für den Simulationsjob üblich), sieht die Konfiguration des Ausführungszeitpunktes wie folgt aus:

Zusätzlich muss man noch den Befehl für den Cronjob angeben. Für die oben gezeigte Beispieldatei würde dieser wie folgt aussehen:

/usr/bin/php ~/executeSimJob.php

Wobei der Pfad /usr/bin/php je nach Serverinstallation abweichen kann. Die Tilde (~) steht für das Verzeichnis, welches Sie als Web-Benutzer auf dem Webserver haben. Wenn Sie Webspace gemietet haben, ist das in der Regel das höchste Verzeichnis, auf das Sie per FTP noch Zugriff haben. Die genauen Pfade sind von Anbieter zu Anbieter verschieden und sind für gewöhnlich auf der Webseite des Anbieter angegeben.

Falls keine Eingabemaske zur Verfügung gestellt wird, kann ein Cronjob auch manuell über die Eingabeaufforderung (z.B. SSH-Zugriff) eingerichtet werden. Dies kann mit dem Befehl crontab erledigt werden. Siehe ein Beispiel unter Ubuntu.