Dieser Artikel stellt hauptsächlich das Prinzip und die Implementierungsmethode des PHP-Skript-Daemons vor. Er analysiert die Implementierungsideen, Prinzipien, Formate und spezifischen Implementierungsmethoden des PHP-Skript-Daemons ausführlicher.
Die Beispiele in diesem Artikel beschreiben die Prinzipien und Implementierungsmethoden des PHP-Skript-Daemons. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Idee:
1 While-Schleife, wenn derzeit keine vorhanden ist Daten, die ausgeführt werden sollen, können Sie in den Ruhezustand versetzen.
2. Das crontab-Skript führt das Skript in jedem festgelegten Zeitraum aus. Es prüft zunächst, ob es bereits ausgeführt wird.
3. Nohup-Hintergrundausführung
4. flock -xn lock
Beispiel:
Auszuführender Code: index. php
<?php set_time_limit(0); //死循环 while(1) { $message = '1111111' . "\n"; error_log($message); sleep(5); }
#/tmp/lock/test1.lock 为当前进程要锁定的文件,不同的进程配置不同的锁文件,该文件会自动创建 * * * * * flock -xn /tmp/lock/test1.lock -c 'nohup php index.php >> /php/test.log 2>&1 &' * * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log'
schreibt das PHP-Skript. Um einen Speicherüberlauf des Daemon-Prozesses zu verhindern, wird empfohlen, die Speichernutzung regelmäßig zu überprüfen.
Fügen Sie den folgenden Code in das Geschäftsskript ein:
if(memory_get_usage()>100*1024*1024){ exit('内存溢出');//大于100M内存退出程序,防止内存泄漏被系统杀死导致任务终端 }
Hinweis:
Methode zum Anzeigen und Schließen von Nohup-Aufgaben:
Schließen:
//方法一: ps -e | grep commend kill -9 pid //方法二: fg %n //n为jobs命令查看的进程号
Anzeigen:
//查看后台进程 jobs
Prinzip:
Verwenden Sie die Linux-Flock-Dateisperre, um die Aufgabensperre zu implementieren und Konflikte zu lösen
Format:
flock [-sxun][-w #] fd# flock [-sxon][-w #] file [-c] command
Optionen
-s, --shared: Eine gemeinsame Sperre erhalten
- x, --exclusive: Erhalten Sie eine exklusive Sperre
-u, --unlock: Entfernen Sie eine Sperre, die normalerweise nicht benötigt wird. Die Sperre wird automatisch verworfen, nachdem das Skript ausgeführt wurde
-n, -- nonblock: Wenn nicht, erhalten Sie die Sperre sofort, schlagen Sie direkt fehl, anstatt zu warten
-w, --timeout: Wenn die Sperre nicht sofort erhalten wird, warten Sie auf die angegebene Zeit
-o, --close: Schließen Sie die Datei Deskriptor, bevor Sie den Befehl ausführen. Wird verwendet, um die Sperre zu steuern, wenn der Befehl einen untergeordneten Prozess erzeugt
-c, --command: Führen Sie einen separaten Befehl in der Shell aus
-h, --help Hilfe anzeigen
-V, - -version: Version anzeigen
Führen Sie eine PHP-Datei aus. Wenn sie gesperrt ist, schlägt sie fehl, ohne zu warten. Die Parameter sind -xn
* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone / php/test.log'
Wenn die Aufgabe nicht abgeschlossen ist und die nächste Aufgabe feststellt, dass /tmp/mytest.lock gesperrt ist, wird die aktuelle Aufgabe beendet und beurteilt wird im nächsten Zyklus erneut durchgeführt.
Das obige ist der detaillierte Inhalt vonMethodenanalyse zum Implementierungsprinzip des Skript-Daemons in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!