2010-04-14 12 views
11

Ich habe ein Skript, das auf einen Jabber-Server hört und entsprechend reagiert. Obwohl es nicht aufhören soll, hat es letzte Nacht getan. Jetzt möchte ich jede Minute einen Cron-Job ausführen, um zu prüfen, ob das Skript läuft, und es starten, wenn nicht.Überprüfen Sie, ob ein PHP-Skript noch läuft

Die Frage ist, wie überprüfe ich, ob ein bestimmtes Skript noch läuft?

Einige Lösungen wurden here veröffentlicht, aber das sind alle für Linux, während ich nach einer Windows-Lösung suche. Irgendwelche Ideen bitte? Vielen Dank.

Antwort

4

Eine schnelle und schmutzige Abhilfe könnte für das Skript sein, eine Zeile in einer Datenbank mit einer Datumsspalte auf CURRENT_TIMESTAMP zu aktualisieren. Lassen Sie das zweite Cron-Skript überprüfen, ob der Zeitstempel dieser Zeile aktuell ist.

+0

ich diese Abhilfe als letztes schreiben kann. Gibt es ein Windows-Shell-Skript, das den Job erledigt? – Nirmal

+0

Windows Shell-Skripte sind weniger benutzerfreundlich als JCL und das sagt etwas, also kann ich Ihnen leider nicht helfen. Sie könnten jedoch versuchen, PowerShell zu betrachten, da dies nützlich zu sein scheint. – Danten

0

Hier ist, was ich in der Regel:

  1. ein Status Verzeichnis erstellen, zB:/data/status/
  2. auf meinem Skript, haben sie überprüfen, ob Statusdatei existiert
    1. wenn es ist existiert, Ausfahrt Skript
    2. wenn nicht vorhanden ist, weiterhin den Prozess

Es gibt jedoch ein Problem in diesem: Was passiert, wenn Skript stirbt und Statusdatei nicht entfernt?

Sie können ein wenig wie das Speichern In überprüfen:

  1. Für jede Minute, Update-Status-Datei
  2. Für jeden Cron Start, überprüfen Sie, ob Statusdatei zuletzt aktualisiert zB ist: 10 oder 30 Minuten vor (wir können davon ausgehen, dass unser Cron-Skript stirbt) wir können Cron-Skript starten.
0

hatte ich das gleiche Problem und ich mit diesem Code gelöst:

file_put_contents("status.txt","ping"); 

ich es innerhalb der Schleife von meinem Skript setzen

so, ich habe das Datum der letzten Änderung der Datei überprüfen sehen, ob das Skript aktiv

nicht den HD überlasten Sie etwas tun können:

$i++ 
if($i%100 == 0) 
    file_put_contents("status.txt","ping"); 

dies wird die Datei, wenn $ i == 100 oder 200 oder 300 etc ...

ist dies eine Abhilfe

+0

Wie ist das effizienter als ein Zeitstempelfeld in einer Datenbank zu aktualisieren? Ich denke, das Aktualisieren einer Datenbank ist besser, da sie über eigene Sperrmechanismen verfügt. Während wir in einer Sackgasse enden können, wenn wir auf eine Datei angewiesen sind. Bitte korrigieren Sie mich, wenn ich falsch liege. – Nirmal

+0

Ich habe viele Skripte auf meinem Notebook ausgeführt.Um von meinem Desktop auf mysql zugreifen zu können, müsste ich PHP installieren. Dies wird unnötig, wenn ich nur mit einer Textdatei arbeite. Aber jeder Fall sollte separat behandelt werden. – Leo

Verwandte Themen