PHP is also able to start and terminate the daemon directly, compared to the shell will be much easier to understand more convenient, of course, the PHP daemon to achieve automatic restart or to rely on the Shell's crontab schedule, every time to execute a script to see if the script needs to restart, If necessary, kill the process to delete the Runfile file, reboot and write the PID in the Runfile file.
<?php function Start ($file) {$path = DirName (__file__). ' /'; $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 $} '); If the PID number in the Runfile can match to the running, and the time of the last access to runfile and the current difference is less than 5min then return if (($oldpid = = $nowpid) && (Time ()-Fileatime ($ (Runfile) <) {echo "$file is Circle runing no"; Return }else{//pid does not match or has 300 seconds without running the loop statement, directly kill the process, restart $pid = file_get_contents ($runfile); Shell_exec ("PS aux | grep ' Php-f process.php ' | grep {$pid} | Xargs--if-no-run-empty kill "); }}else{//write the file PID to the run file if (!) ( $newpid = Getmypid ()) | | !file_put_contents ($runfile, $newpid)) {return; } while (true) {//receives the end process new number, ends the process,and delete the relevant file if (File_exists ($diefile) && unlink ($runfile) && unlink ($diefile)) {retur N }/* Here is what the daemon will do */file_put_contents ($file, "I m runing Now". Php_eol,file_append); /***********************/Touch ($runfile); Sleep (5); }}}start ("Test");
some points to note when PHP writes the daemon:
1. First is the function Clearstatcache () function There, check the official manual can know that the function is to clear the file state cache, when the same file in a script to check the state of the cache multiple times if you do not use the function will be an error, affected by the function is: 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. When the script is run multiple times, it is instrumented before running, and the last execution cycle is now greater than 300s or the PID number mismatch restarts the process (the time is updated with touch on each execution loop).
3. The automatic restart also uses the Crontab schedule to add the file to the timeline:
Crontab-e
#打开日程表, inset mode
*/3 * * * */usr/bin/php-f process.php
#每3分钟执行一次, the placement process hangs out
This is basically OK, if there is a specific function, you need to change the code.