Maison > interface Web > js tutoriel > Exemple de démon PHP_Connaissances de base

Exemple de démon PHP_Connaissances de base

WBOY
Libérer: 2016-05-16 16:10:51
original
1146 Les gens l'ont consulté

PHP peut également démarrer et terminer directement le processus démon. Par rapport au shell, c'est beaucoup plus simple et plus facile à comprendre. Bien sûr, le redémarrage automatique du processus démon php dépend toujours du calendrier d'exécution de la crontab. le script de temps en temps pour voir si le script doit être redémarré. Si nécessaire, tuez le processus, supprimez le fichier RunFile, redémarrez et écrivez le pid dans le fichier RunFile.

Copier le code Le code est le suivant :

début de la fonction ($ fichier) {
$path = dirname(__FILE__).'/';
$runfile = $path.$file.'.run';
$diefile = $path.$file.'.die';
$file = $path."data/{$file}.php";
​ clearstatcache();
Si(file_exists($runfile)){
          $oldpid = file_get_contents($runfile);
           $nowpid = shell_exec("ps aux | grep 'php -f process.php' | grep ${oldpid} | awk '{print $2}'");
//Si le numéro pid dans le fichier d'exécution peut correspondre à celui en cours d'exécution et que la différence entre la dernière fois que le fichier d'exécution a été accédé et l'heure actuelle est inférieure à 5 minutes, alors retournez
Si(($oldpid == $nowpid) && (time() - fileatime($runfile) < 300)){
echo "$file est un cercle qui tourne non";
             revenir ;
         }autre{
//Si le numéro pid ne correspond pas ou si l'instruction de boucle n'a pas été exécutée depuis 300 secondes, tuez directement le processus et redémarrez
                $pid = file_get_contents($runfile);
shell_exec("ps aux | grep 'php -f process.php' | grep {$pid} | xargs --if-no-run-empty kill");
>
}autre{
//Écrivez le fichier pid dans le fichier d'exécution
Si(!($newpid = getmypid()) || !file_put_contents($runfile,$newpid)){
             revenir ;
>
         while(true){
//Recevez le nouveau numéro du processus de fin, terminez le processus et supprimez les fichiers associés
If(file_exists($diefile) && dissocier($runfile) && dissocier($diefile)){
                  revenir ;
            }
                 /*Voici ce que fait le processus démon*/
              file_put_contents($file,"Je cours maintenant".PHP_EOL,FILE_APPEND);
               /***********************/
               touch($runfile);
              sleep(5);
>
>
>
start("test");

Hp doit prêter attention à quelques points lors de l'écriture de processus démon :

1. La première est la fonction clearstatcache(). Consultez le manuel officiel pour savoir que cette fonction efface le cache d'état du fichier lorsque vous vérifiez l'état du cache du même fichier plusieurs fois dans un script, une erreur se produira si cela. La fonction n'est pas utilisée. , les personnes concernées par cette fonction sont : 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. Lorsque le script est exécuté plusieurs fois, il sera détecté avant son exécution. Si le temps écoulé depuis la dernière exécution de la boucle est désormais supérieur à 300 s ou si le numéro pid ne correspond pas, le processus sera redémarré (le temps doit être redémarré). mis à jour à chaque exécution de la boucle).
3. Le redémarrage automatique utilise également la planification crontab. Ajoutez ce fichier à la planification :
.

Copier le code Le code est le suivant :

crontab -e
#Horaire ouvert, mode encart

*/3 * * * * /usr/bin/php -f process.php
#Exécuter une fois toutes les 3 minutes, mettre le processus en attente

C'est fondamentalement ok. S'il y a des fonctions spécifiques, le code doit encore être modifié.

É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