Maison > Article > développement back-end > Principe du processus du démon de script PHP et code d'implémentation
Cet article présente principalement les principes et les méthodes d'implémentation du processus démon de script PHP. Il analyse plus en détail les idées d'implémentation, les principes, les formats et les méthodes d'implémentation spécifiques du processus démon de script PHP. Les amis qui en ont besoin peuvent s'y référer. . J'espère que cela pourra aider tout le monde.
Idées :
1. boucle while, s'il n'y a pas de données à exploiter, vous pouvez dormir
2. à chaque heure fixe Exécutez le script pendant la période de temps. Lors de l'exécution, vérifiez d'abord s'il est déjà en cours d'exécution. S'il n'est pas exécuté, ignorez-le.
3. exécution en arrière-plan nohup
4. flock -xn lock
Exemple :
Code à exécuter : 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'
écrit le script php. Pour éviter le débordement de mémoire du processus démon, il est recommandé de vérifier régulièrement l'utilisation de la mémoire.
Mettez le code suivant dans le script métier :
if(memory_get_usage()>100*1024*1024){ exit('内存溢出');//大于100M内存退出程序,防止内存泄漏被系统杀死导致任务终端 }
Remarque :
Méthode de visualisation et de fermeture des tâches Nohup :
Fermer :
//方法一: ps -e | grep commend kill -9 pid //方法二: fg %n //n为jobs命令查看的进程号
Afficher :
//查看后台进程 jobs
Principe :
Utilisez le verrouillage des fichiers flock Linux pour implémenter le verrouillage des tâches et résoudre les conflits
format :
flock [-sxun][-w #] fd# flock [-sxon][-w #] file [-c] command
Options
-s, --shared : Obtenez un verrou partagé
- x, --exclusive : Obtenez un verrou exclusif
-u, --unlock : Supprimez un verrou, qui n'est généralement pas nécessaire. Le verrou sera automatiquement supprimé une fois le script exécuté
-n, --. nonblock : Si ce n'est pas le cas, obtenez le verrou immédiatement, échouez directement au lieu d'attendre
-w, --timeout : si le verrou n'est pas obtenu immédiatement, attendez le temps spécifié
-o, --close : fermez le fichier descripteur avant d’exécuter la commande. Utilisé pour contrôler le verrou si la commande génère un processus enfant
-c, --command : Exécuter une commande distincte dans le shell
-h, --help Afficher l'aide
-V, - -version : Version affichée
Exécuter un fichier php. Le verrouillage du fichier utilise un verrou exclusif. S'il est verrouillé, il échouera sans attendre. Les paramètres sont -xn
* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> / php/test.log'
De cette façon, lorsque la tâche n'est pas terminée et que la tâche suivante détermine que /tmp/mytest.lock est verrouillé, la tâche en cours sera terminée et le jugement sera refait au prochain cycle.
Recommandations associées :
Explication détaillée des façons courantes d'implémenter des démons en PHP
Deux façons courantes d'implémenter des démons en PHP
Analyse de méthode sur le principe d'implémentation du démon de script en php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!