PHP kann auch den Daemon -Prozess direkt starten und beenden. Im Vergleich zur Schale ist es viel einfacher und bequemer zu verstehen. Wenn der PHP -Daemon automatisch neu gestartet werden muss, hängt dies natürlich immer noch vom Crontab -Zeitplan der Shell ab. Führen Sie das Skript von Zeit zu Zeit aus, um festzustellen, ob das Skript neu gestartet werden muss. Töten Sie bei Bedarf den Prozess und löschen Sie die RUNFILE -Datei, starten Sie neu und schreiben Sie die PID in die Runfile -Datei.
Die Codekopie lautet wie folgt:
<? Php
Funktion start ($ file) {
$ path = dirName (__ Datei __). '/';
$ runFile = $ path. $ Datei. '. Run';
$ tiebile = $ path. $ Datei. '. Die';
$ file = $ path. "data/{$ file} .php";
ClearStatcache ();
if (Datei_exists ($ runFile)) {
$ oldpid = file_get_contents ($ runFile);
$ nowpid = Shell_exec ("ps ux | grep 'php -f process.php' | grep $ {oldpid} | awk '{print $ 2}'");
// Wenn die PID -Nummer in der Runfile mit dem laufenden und dem Unterschied zwischen dem letzten Zugriff auf die Runfile und der aktuellen Differenz mit weniger als 5 Minuten übereinstimmen kann
if (($ oldpid == $ nowpid) && (time () - fileatime ($ runfile) <300)) {
echo "$ file ist Kreis läuft nein";
zurückkehren;
}anders{
// Die PID -Nummer stimmt nicht überein oder die Schleifenanweisung wurde 300 Sekunden lang nicht ausgeführt. Töte einfach den Prozess und starten Sie ihn neu
$ pid = file_get_contents ($ runFile);
Shell_exec ("PS Aux | Grep 'php -f process.php' | grep {$ pid} | xargs-If-no-run-the-Tötung");
}
}anders{
// Schreiben Sie die Datei -PID in die Ausführungsdatei
if (! ($ newpid = getMypid ()) ||! file_put_contents ($ runFile, $ newpid) {
zurückkehren;
}
while (wahr) {
// Erhalten Sie eine neue Endprozessnummer, beenden Sie den Prozess und löschen Sie die entsprechenden Dateien
if (File_Exists ($ tiebile) && unlink ($ runFile) && unlink ($ tiebile)) {
zurückkehren;
}
/*Das muss der Daemon tun*/
file_put_contents ($ file, "Ich werde jetzt ausführen" .php_eol, File_Append);
/**********************//
touch ($ runfile);
Schlaf (5);
}
}
}
Start ("Test");
Einige Punkte, auf die Sie beim Schreiben von Daemons mit HP achten können:
1. Das erste, was die Funktion clearStatCache () funktion ist. Wenn Sie sich das offizielle Handbuch ansehen, können Sie wissen, dass die Funktion den Dateistatus -Cache löscht. Wenn Sie den Cache -Status derselben Datei mehrmals in einem Skript überprüfen, tritt ein Fehler auf, wenn die Funktion nicht verwendet wird. The affected functions are: stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), fileperms ().
2. Wenn das Skript mehrmals ausgeführt wird, wird es vor dem Ausführen erkannt. Die Zeitstrecke der letzten Schleife ist jetzt größer als 300S, oder die PID -Nummer übereinstimmt nicht neu (die Zeit muss in jeder Schleifeausführung aktualisiert werden).
3. Automatischer Neustart verwendet auch Crontabs Zeitplan, fügen Sie die Datei zum Zeitplan hinzu:
Die Codekopie lautet wie folgt:
Crontab -e
#Open den Zeitplan, der Einschubmodus
*/3 * * * */usr/bin/php -f process.php
#EXECUTE alle 3 Minuten, setzen Sie den Prozess zum Aufhängen ein
Das ist im Grunde in Ordnung. Wenn es bestimmte Funktionen gibt, müssen Sie den Code ändern.