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


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

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


8
2017-09-01 23:20


Ursprung


Antworten:


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) Prüfen Sie, ob sie ausgeführt werden, und starten Sie sie gegebenenfalls neu.


4
2017-09-01 23:26



Wir betreiben unsere Daemons, indem wir die Ausgabe an die Post schicken.

php daemon.php | mail -s "daemon stopped" foo@example.org

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 anderes gibt, auf das man aufpassen muss, also ist das normalerweise in Ordnung.


3
2017-09-21 11:14



Schnelles und schmutziges Cron, um deinen Daemon neu zu starten:

* * * * * USER ps auxww | grep SCRIPTNAME > /dev/null || SCRIPTNAME

Ersetzen Sie USER durch den Benutzer, für den der Daemon ausgeführt wird, und SCRIPTNAME mit dem Namen Ihres Skripts. Kleben Sie das ein /etc/cron.d/restart_php_daemon. Es sollte jede Minute laufen. Ändern Sie die erste * zu */2 oder */5 seltener laufen.

AKTUALISIEREN

Wenn du das in deine eigene crontab bringst:

Lauf crontab -e und füge hinzu:

* * * * * ps auxwww | grep SCRIPTNAME > /dev/null || SCRIPTNAME

3
2017-09-02 14:10



Die eleganteste Lösung ist phpdaemon oder reagierenPHP.


3
2018-04-28 07:17



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


1
2017-09-02 02:28



Daemon ist ein Linux-Prozess, der im Hintergrund ausgeführt wird. 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.

// Daemonize
$pid = pcntl_fork(); // parent gets the child PID and child gets 0
if($pid){ // if pid is not 0
     // Only the parent will know the PID. Kids aren't self-aware
     // Parent says goodbye!
     print "Parent : " . getmypid() . " exiting\n";
     exit();
}
print "Child : " . getmypid() . "\n";

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


1
2018-03-06 23:27



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 langfristig erfolgreich waren), PHP 5.3 hat jetzt auch eine verbesserte Speicherbereinigung, und wenn das Skript gut genug geschrieben ist, um nicht ungeplant zu beenden, dann sollte der Speicher weit weniger ein Problem sein als zuvor.


0
2017-09-21 00:17



Ich stimme zu, dass PHP nicht das beste Werkzeug dafür ist, aber ich kann verstehen, 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 habe schließlich den 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: http://www.4pmp/fatcontroller/


0
2018-02-07 08:55