标签:style blog io ar color sp 文件 on div
php也是可以直接进行守护进程的启动与终止的,相对于shell来说会简单很多,理解更方便,当然了php的守护进程要实现自动重启还是要依赖于shell的crontab日程表,每隔一段时间去执行一次脚本看脚本是否需要重启,如果需要则杀掉进程删除RunFile文件,重新启动并在RunFile文件中写入pid。
<?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 $2}‘"); //如果runfile中的pid号可以匹配到正在运行的,并且上次访问runfile的时间和现在相差小于5min则返回 if(($oldpid == $nowpid) && (time() - fileatime($runfile) < 300)){ echo "$file is circle runing no"; return; }else{ //pid号不匹配或者已经有300秒没有运行循环语句,直接杀掉进程,重新启动 $pid = file_get_contents($runfile); shell_exec("ps aux | grep ‘php -f process.php‘ | grep {$pid} | xargs --if-no-run-empty kill"); } }else{ //将文件pid写入run文件 if(!($newpid = getmypid()) || !file_put_contents($runfile,$newpid)){ return; } while(true){ //收到结束进程新号,结束进程,并删除相关文件 if(file_exists($diefile) && unlink($runfile) && unlink($diefile)){ return; } /*这里是守护进程要做的事*/ file_put_contents($file,"I‘m Runing Now".PHP_EOL,FILE_APPEND); /***********************/ touch($runfile); sleep(5); } } } start("test");
php写守护进程时童谣要注意几点:
crontab -e #打开日程表,inset模式 */3 * * * * /usr/bin/php -f process.php #每3分钟执行一次,放置进程挂掉
这样就基本ok了,要是有具体功能的话还需改动代码。
标签:style blog io ar color sp 文件 on div
原文地址:http://www.cnblogs.com/iforever/p/4117536.html