PHP peut également démarrer et terminer directement le processus de démon. Par rapport à la coquille, il est beaucoup plus simple et plus pratique à comprendre. Bien sûr, si le démon PHP doit redémarrer automatiquement, cela dépend toujours du calendrier de crontab de la coquille. Exécutez le script de temps en temps pour voir si le script doit être redémarré. Si nécessaire, tuez le processus et supprimez le fichier Runfile, redémarrez et écrivez le PID dans le fichier RUNFILE.
La copie de code est la suivante:
<? Php
fonction start ($ file) {
$ path = dirname (__ fichier __). '/';
$ runfile = $ path. $ file. '. run';
$ diefile = $ path. $ file. '. Die';
$ file = $ path. "data / {$ file} .php";
clearStatCache ();
if (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 de PID dans le fichier de course peut correspondre à celui en cours d'exécution, et que la différence entre la dernière fois que vous accédez au fichier Run et la différence de courant est inférieure à 5 minutes, puis revenez
if (($ oldpid == $ nowpid) && (time () - fileatime ($ runfile) <300)) {
Echo "$ Le fichier est en cours d'exécution de cercle";
retour;
}autre{
// Le numéro PID ne correspond pas ou l'instruction LOOP n'a pas été exécutée pendant 300 secondes. Tuez simplement le processus et redémarrez-le
$ 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
if (! ($ newPid = getMyPid ()) ||! file_put_contents ($ runfile, $ newpid)) {
retour;
}
while (true) {
// Recevez un nouveau numéro de processus final, terminez le processus et supprimez les fichiers pertinents
if (file_exists ($ diefile) && unlink ($ runfile) && unlink ($ diefile)) {
retour;
}
/ * C'est ce que le démon doit faire * /
file_put_contents (fichier $, "j'en utilise maintenant" .php_eol, file_append);
/ ************************ /
Touch ($ runfile);
sommeil (5);
}
}
}
start ("test");
Quelques points à faire attention lors de l'écriture de démons avec HP:
1. La première chose est la fonction ClearStatCache () de fonction. En regardant le manuel officiel, vous pouvez savoir que la fonction efface le cache d'état du fichier. Lors de la vérification de l'état du cache du même fichier plusieurs fois dans un script, une erreur se produira si la fonction n'est pas utilisée. Les fonctions affectées sont: stat (), lStat (), file_exists (), is_witable (), is_readable (), is_execuable (), is_file (), is_dir (), is_link (), filectime (), fileatime (), filemtize (), fileNode (), filegroup (), fileoNner (), fileSize (), fileNode (), filegroup (), fileOnner (), FileSize (), FileSe (), FileGroup (), FileOnner (), FileSize (), FileNode (), FileGroup (), FileOnner (), FileSize,) FilePerms ().
2. Lorsque le script est exécuté plusieurs fois, il sera détecté avant l'exécution. La distance temporelle de la dernière boucle est désormais supérieure aux 300s ou le numéro PID ne correspond pas sera redémarré (le temps doit être mis à jour dans chaque exécution de boucle).
3. Le redémarrage automatique utilise également le calendrier de Crontab, ajoutez le fichier au calendrier:
La copie de code est la suivante:
crontab -e
#Open de l'horaire, mode encadré
* / 3 * * * * / usr / bin / php -f process.php
#Exécute toutes les 3 minutes, mettez le processus pour suspendre
C'est fondamentalement OK. S'il existe des fonctions spécifiques, vous devez modifier le code.