Was ist der beste Weg, um ein PHP-Skript als Daemon laufen zu lassen?

8

Was ist der beste Weg, um ein PHP-Skript als Daemon laufen zu lassen, und was ist der beste Weg zu überprüfen, ob ein Neustart erforderlich ist.

Ich habe einige Skripte, die 24/7 laufen müssen und größtenteils kann ich sie mit nohup ausführen. Aber wenn sie ausfallen, was ist der beste Weg, sie zu überwachen, damit sie automatisch neu gestartet werden kann?

    
Aldie 01.09.2008, 23:20
quelle

9 Antworten

4

Wenn Sie die (richtige) Init-Struktur nicht dafür verwenden können (Sie verwenden Shared Hosting usw.), verwenden Sie cron, um alle paar Minuten ein Skript auszuführen (es kann in der gewünschten Sprache geschrieben werden) Das überprüft, ob sie ausgeführt werden, und startet sie bei Bedarf neu.

    
rmmh 01.09.2008, 23:26
quelle
3

Wir lassen unsere Daemons laufen, indem wir die Ausgabe an die Mail leiten.

%Vor%

Auf diese Weise wird, wenn der Daemon aufhört, eine Mail gesendet, und wir werden auf diese Weise benachrichtigt.

Es bedeutet natürlich immer noch manuellen Neustart der Dämonen, aber wir werden es sofort wissen. Normalerweise, wenn die Dämonen aufgehört haben, bedeutet das, dass es noch etwas gibt, um das man sich kümmern muss, das ist normalerweise in Ordnung.

    
troelskn 21.09.2008 11:14
quelle
3

Schneller und schmutziger Cron, um deinen Daemon neu zu starten:

%Vor%

Ersetzen Sie USER durch den Benutzer, für den der Daemon läuft, und SCRIPTNAME mit dem Namen Ihres Skripts. Kleben Sie dies in /etc/cron.d/restart_php_daemon . Es sollte jede Minute laufen. Ändern Sie die erste * in */2 oder */5 , um weniger häufig zu laufen.

AKTUALISIEREN

Wenn du das in deine eigene crontab bringst:

Führen Sie crontab -e aus und fügen Sie hinzu:

%Vor%     
Gary Richardson 02.09.2008 14:10
quelle
3

Die eleganteste Lösung ist phpdaemon oder reactPHP .

    
Janus Troelsen 28.04.2012 07:17
quelle
1

Ich hatte Erfolg beim Ausführen eines wget und Senden des Ergebnisses an / dev / null auf einem freigegebenen Server.

    
Daniel 02.09.2008 02:28
quelle
1

Daemon ist ein Linux-Prozess, der im Hintergrund läuft; Apache oder Mysql sind Dämonen. In einer Linux-Umgebung können wir ein Hintergrundprogramm mit Cronjob ausführen, aber es hat einige Einschränkungen, und in einigen Szenarien ist es keine gute Idee. Zum Beispiel können wir mit Cronjob nicht kontrollieren, ob die vorhergehende Ausführung bereits beendet wurde. So oft ist es bequemer, einen Prozess als Daemon auszuführen.

%Vor%

Der obige Code stammt aus einem sehr guten Artikel darüber, wie man einen Daemon in PHP erstellt. Sie können dies unter Link

lesen     
sergioska 06.03.2014 23:27
quelle
0

Ich benutze ein PHP-basiertes Skript, um aus einer Datenbank zu lesen und E-Mails zu senden (mit der PEAR Mail_Queue-Bibliothek). Ich führe es aus einem Bash-Skript und basierend auf dem zurückgegebenen Ergebnis (aus "exit $ status;") entweder anhalten, X Sekunden schlafen, oder sofort neu starten. (Ich überprüfte auch den Lastdurchschnitt / Schlaf in das PHP-Skript, um das Mail-System nicht zu belasten).

Wenn es für einen langfristigen Daemon wäre, der ständig laufen müsste, dann stimme ich zu, es wäre wahrscheinlich nicht das Beste, um das auszuführen (obwohl ich von einigen Socket-Servern gehört habe, die lange erfolgreich waren) Allerdings hat PHP 5.3 jetzt auch eine verbesserte Speicherbereinigung, und wenn das Skript gut genug geschrieben ist, um ungeplant nicht zu beenden, dann sollte der Speicher weit weniger problematisch sein als zuvor.

    
Alister Bulman 21.09.2008 00:17
quelle
0

Ich stimme zu, dass PHP nicht das beste Werkzeug dafür ist, aber ich verstehe, warum Sie PHP verwenden wollen, damit Sie Komponenten aus Ihrer Anwendung wiederverwenden können, wie zum Beispiel den Datenbankzugriff und so weiter.

Ich hatte ein ähnliches Problem und am Ende habe ich The Fat Controller entwickelt, einen in C geschriebenen Daemon, der PHP-Skripte ausführen kann. Es kann auch als Multithread-Daemon ausgeführt werden, der viele Instanzen eines Skripts parallel ausführt.

Hier finden Sie weitere Informationen und Anwendungsfälle: Ссылка

    
SlappyTheFish 07.02.2011 08:55
quelle
-1

TBH, PHP ist wahrscheinlich nicht das beste Werkzeug dafür, wirklich nicht das, wofür es entwickelt wurde. Ich habe von Speicherlecks und anderen schlimmen Ereignissen gehört, wenn du das versuchst. Bedenken Sie auch, dass PHP nur eine begrenzte Anzahl von Ressourcen-IDs (für Datei-Handles, Db-Verbindungen usw.) pro Ausführung eines Skripts hat.

Sei besser, etwas anderes zu benutzen, vielleicht Python oder Perl, obwohl ich keine wirkliche Erfahrung damit habe, diese Art von Apps zu schreiben, aber ich weiß, dass PHP nicht das Richtige für das ist, was du tun willst.

    
Robin Barnes 02.09.2008 01:03
quelle

Tags und Links