PHP también puede iniciar y terminar directamente el proceso de demonio. En comparación con el caparazón, es mucho más simple y más conveniente de entender. Por supuesto, si el demonio PHP necesita reiniciar automáticamente, aún depende del horario de Crontab de Shell. Ejecute el script de vez en cuando para ver si el script debe reiniciarse. Si es necesario, mate el proceso y elimine el archivo de archivo, reinicie y escriba el PID en el archivo Runfile.
La copia del código es la siguiente:
<? Php
Función Start ($ archivo) {
$ path = dirname (__ archivo __). '/';
$ runfile = $ path. $ archivo. '. 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 '{imprimir $ 2}'");
// Si el número de PID en el archivo de run puede coincidir con el en ejecución, y la diferencia entre la última vez que accede al archivo de ejecución y la diferencia actual es inferior a 5 minutos, luego regrese
if (($ oldpid == $ nowpid) && (time () - fileatime ($ runfile) <300)) {
echo "$ el archivo es círculo ejecutando no";
devolver;
}demás{
// El número PID no coincide o la instrucción de bucle no se ha ejecutado durante 300 segundos. Solo mata el proceso y reinégalo
$ pid = file_get_contents ($ runfile);
shell_exec ("ps aux | grep 'php -f process.php' | grep {$ pid} | xargs-if-no-run-sempty kill");
}
}demás{
// Escribe el archivo PID en el archivo Ejecutar
if (! ($ newpid = getMypid ()) ||! file_put_contents ($ runfile, $ newpid)) {
devolver;
}
while (verdadero) {
// recibir un nuevo número de proceso final, finalizar el proceso y eliminar los archivos relevantes
if (file_exists ($ diefile) && Unlink ($ runfile) && Unlink ($ diefile)) {
devolver;
}
/*Esto es lo que el demonio necesita hacer*/
file_put_contents ($ archivo, "Estoy ejecutando ahora" .php_eol, file_append);
/************************
touch ($ runfile);
dormir (5);
}
}
}
inicio ("prueba");
Algunos puntos a los que prestar atención al escribir demonios con HP:
1. Lo primero es la función ClearStatCache (). Mirando el manual oficial, puede saber que la función borra el caché de estado del archivo. Al verificar el estado de la memoria caché del mismo archivo varias veces en un script, se producirá un error si no se usa la función. The affected functions are: 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. Cuando el script se ejecuta varias veces, se detectará antes de ejecutarse. La distancia de tiempo del último bucle ahora es mayor que 300 o el número PID no se reiniciará (el tiempo debe actualizarse en cada ejecución del bucle).
3. Reiniciar automático también usa el horario de Crontab, agregue el archivo al horario:
La copia del código es la siguiente:
crontab -e
#Preen el horario, modo de inserción
*/3 * * * */usr/bin/php -f process.php
#Ex. Cada 3 minutos, pon el proceso para colgar
Esto está básicamente bien. Si hay funciones específicas, debe cambiar el código.