Principes et méthodes du processus du démon de script PHP

墨辰丷
Libérer: 2023-03-26 20:06:02
original
1186 Les gens l'ont consulté

Cet article présente principalement le principe et la méthode d'implémentation du 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 démon de script PHP

.

Idée :

1. boucle while, s'il n'y a pas de données à exploiter, vous pouvez dormir
2. période, une fois exécuté, vérifiez d'abord s'il est déjà en cours d'exécution. Sinon, 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 = &#39;1111111&#39; . "\n";
  error_log($message);
  sleep(5);
}
Copier après la connexion

#/tmp/lock/test1.lock 为当前进程要锁定的文件,不同的进程配置不同的锁文件,该文件会自动创建
* * * * * flock -xn /tmp/lock/test1.lock -c &#39;nohup php index.php >> /php/test.log 2>&1 &&#39;
* * * * * flock -xn /tmp/mytest.lock -c &#39;php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log&#39;
Copier après la connexion

é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(&#39;内存溢出&#39;);//大于100M内存退出程序,防止内存泄漏被系统杀死导致任务终端
}
Copier après la connexion

Remarque :

Méthode de visualisation et de fermeture des tâches nohup :

Fermer :

//方法一:
ps -e | grep commend
kill -9 pid
//方法二:
fg %n  //n为jobs命令查看的进程号
Copier après la connexion

Afficher :

//查看后台进程
jobs
Copier après la connexion

Principe :

Utiliser 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
Copier après la connexion

Options

-s , --shared : Obtenez un verrou partagé
-x, --exclusive : Obtenez un verrou exclusif
-u, --unlock : Supprimez un verrou, qui est généralement inutile. Le verrou sera automatiquement supprimé après le. le script est exécuté.
-n, --nonblock : Si le verrou n'est pas obtenu 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 descripteur de fichier 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écutez 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 :

Méthode d'implémentation PHP du scriptexécution asynchrone

Démarrage du service php-fpmscriptétapes détaillées

phpscriptmettre à jour régulièrement la liste des produits

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal