2011-01-17 7 views
8

Ich habe ein PHP-Skript, das eingehende Socket-Anfragen usw. abhört. Ich brauche dieses Skript, um kontinuierlich auf dem Server zu laufen (es läuft in einer Endlosschleife).Wie man ein beständiges PHP-Skript laufen lässt?

Wie kann ich diesen Prozess initiieren und verwalten? Ich habe versucht, es einfach durch SSH/Putty zu starten, aber sobald die SSH-Verbindung ausläuft, stirbt das Skript.

+4

mögliche Duplikate von [Run PHP-Skript als Daemon-Prozess] (http://StackOverflow.com/Questions/2036654/Run-PHP-Script-AS-Daemon-Process) –

+2

Viele gute Informationen: http: // Stackoverflow .com/Suche?q = php + daemon –

+1

Überprüfen Sie "Bildschirm" Dienstprogramm auch Ihre Sitzung von ssh zu trennen (und erneut verbinden, wenn Sie wollen) – regilero

Antwort

6
myscript.php & 

Dies läuft der scriptin den Hintergrund

Sie können es mit

ps aux | grep myscript.php 

Wie Patrick unten in den Kommentaren erwähnt hat, gibt es keine maximale Ausführungszeit für PHP-Skripte laufen aus Befehlszeile. myscript.php wird unbegrenzt laufen.

+0

Sie können es mit 'set_time_limit' überschreiben. –

+4

gibt es kein Zeitlimit bei der Ausführung von der Befehlszeile – Patrick

+0

@Patrick gut zu wissen! – ActionOwl

2

Führen Sie das Skript im Hintergrund durch SSH, wie hier erklärt: Getting ssh to execute a command in the background on target machine

dann würde ich vorschlagen, dass Sie eine Möglichkeit haben, zu überwachen, ob das Skript noch ausgeführt wird. Sie haben erwähnt, dass Ihr Skript einen Port überwacht. Sie könnten vielleicht ein Skript schreiben, das ab und zu prüft, ob der Port noch offen ist.

Eine weitere Option ist die Überwachung der Prozess-ID. Wenn das Skript zum ersten Mal ausgeführt wird, können Sie die Prozess-ID mit der Funktion getmypid abrufen und in einer Datei speichern. Sie können dann regelmäßig prüfen, ob es noch läuft ps -p 1234.

Eine andere Lösung: How to check if a php script is still running

-1

Warum nicht eine Do While-Schleife? do { /* your code */ } while $something == 0;

Dann, wenn etwas passiert, das Anhalten des Skripts auslösen, setzen $ etwas auf einen anderen Wert als 0

+1

Ich glaube, dass ' $ etwas = 0; 'ist eine Aufgabe und kein echter/falscher Test ..;) Aber ich bin sicher, dass du das wusstest. Eine andere Sache ist, dass wenn du irgendetwas auf einem Loop-Szenario basierst, es sei denn deine Logik (Skript/Funktion ... was auch immer) blockiert auf etwas - irgendwelche Schleifen, während "Leerlauf" überhaupt nicht im Leerlauf sein wird, aber die CPU des Servers zu verschwenden wertvolle Ressourcen auf einem Server-weiten oder zumindest virtuellen Server-weiten Bereich verschwenden. – Tore

0

Sie können Befehlszeile ausführen. Sie müssen einen Modifikator "Im Hintergrund ausführen" hinzufügen, damit das System nicht auf die Ausführung des Skripts wartet. Im Grunde hast du am Ende deiner Kommandozeile einen & gesetzt.

Eines sollten Sie einen ini-Shell-Skript auf jeden Fall tun ist, erstellen, die das PHP-Skript einhüllen von allen etwaigen Neustarts beim Booten ausgeführt wird.

1

Wir hatten vor kurzem ein ähnliches Bedürfnis. Wir betreiben einen Ubuntu 14.04 LTS-Server, also einen upstart Prozess, um den Prozess beim Booten zu starten, und startet neu, wenn er aus irgendeinem Grund beendet wird.

Es hat für uns sehr gut funktioniert, einschließlich des automatischen Neustarts; Unser langwieriger Prozess verliert schließlich die MySQL-Verbindung. Das Skript verarbeitet die Ausnahme und beendet den Prozess, bevor der Prozess den Prozess automatisch neu startet (upstart). Wir haben auch eine cron Skript hinzugefügt, um den Prozess zu überwachen, nur für den Fall, dass es einen größeren Fehler gibt, der upstart aufgibt zu versuchen, neu zu starten; wir haben eine Ausfallsicherung für den Fall, dass ein einfacher Neustart den vorherigen Fehler nicht korrigiert.

+0

Das wäre meine erste Wahl. – musicliftsme