Rolf B: php-Script alle 5 Minuten

Beitrag lesen

Hallo Hank,

das Folgende macht man dann und nur dann, wenn man keinen Dienst hat, der zeitgesteuert ein PHP Script aufrufen kann. Auf einem Linux-Server wäre das ein cron Job, auf einem Windows-Gerät kann man dafür den Aufgabenplaner bemühen. Bei reinen Web-Hosting Paketen ist das nicht verfügbar, man braucht schon einen Server mit Root-Zugang oder ein Hosting-Paket, wo ein Timer-Dienst angeboten wird (keine Ahnung ob es die gibt).

Ich hab vor ewigen Jahren mal ein MMORPG gespielt, wo man Völker regieren durfte und jede Spielfigur vom Server separat verwaltet wurde. Jede halbe Stunde wurde geprüft, ob Spielfiguren zu alt wurden, ob neue geboren wurden, und einiges mehr. Dieser Updatezyklus fand in einem normalen Webrequest desjenigen Spielers statt, der das Pech hatte, genau im passenden Moment hereinzukommen. Man tat gut daran, um xx:00 oder xx:30 Uhr keinen Angriff zu starten, wenn man nämlich erstmal den Update-Zyklus reingedrückt bekam, war man mitten im Angriff etliche Sekunden gelähmt.

Dieses Spiel lief auf einem Billigserver ohne cron-Jobs und hat den Ansatz verwendet, den Du Dir überlegst. Da reicht aber keine Prüfung, ob die Minuten durch 5 teilbar sind. Denn

  • Wenn in dieser Minute mehr als ein Webrequest hereinkommt, soll die Spezialaktion trotzdem nur einmal ablaufen
  • Wenn in einer durch 5 teilbaren Minute gar kein Request hereinkommt, muss die Spezialaktion trotzdem irgendwann ablaufen.

Wenn Du diese Fünfminutenaktion also als Teil der normalen Webrequests einbauen willst, brauchst also eine Steuerung, die dafür sorgt, dass sie immer nur einmal läuft. Wie diese Steuerung aussieht, hängt auch davon ab, wie genau Du an der durch 5 teilbaren Minute liegen musst. Bei dem MMORPG, von dem ich sprach, war es wichtig, dass sie jeweils um xx:00 und xx:30 Uhr lief, so dass es insgesamt 48 Updatezyklen pro Tag gab.

Du könntest z.B. in einer DB-Tabelle oder eine Datei speichern, wann der nächste Fälligkeitszeitpunkt ist - sagen wir: 13:20 Uhr. Wenn dann um 13:22 ein Webrequest kommt, ist der Fälligkeitszeitpunkt erreicht und die Spezialaktion kann laufen. In der Steuertabelle addierst Du dann einfach 5 Minuten auf den Fälligkeitszeitpunkt auf - 13:25. Damit führst Du die Spezialaktion zwar nicht mit 5 Minuten Abstand durch, aber stellst sicher, dass es 12 pro Stunde werden.

Es kann auch sein, dass 13:20 Uhr die Fälligkeit ist, der nächste Request aber erst um 13:33 kommt. Dann hast Du 2 Fälligkeiten verpasst - und nun hast Du je nach fachlichem Hintergrund die Entscheidungsfreiheit, die beiden verpassen Fälligkeiten nachzuberechnen, oder sie wegzulassen.

Rolf

--
sumpsi - posui - obstruxi