有时候在服务器上面写一些脚本的时候,经常要放到crontab里面定时运行。时间长了就有一个问题,那就是程序重复运行消耗太多的资源,怎么处理呢?下面我写了两种方法:
第一种:用linux里面的正则匹配@H_301_3@
代码如下:
301_3@function ifrun($clsname,$bf = 0)@H_301_3@{@H_301_3@//下面进行检测,如有一个进程正在运行,则不运行@H_301_3@$str=shell_exec("/bin/ps ax > /home/root/".$clsname."_run.txt");@H_301_3@$str=shell_exec("/bin/grep -c '".$clsname.".PHP' /home/root/".$clsname."_run.txt");if($bf >0)@H_301_3@{@H_301_3@if($str >=$bf)@H_301_3@{@H_301_3@return 1;@H_301_3@}@H_301_3@else@H_301_3@{@H_301_3@return 0;@H_301_3@}@H_301_3@}@H_301_3@else@H_301_3@{@H_301_3@if ($str>=2)@H_301_3@{@H_301_3@return 1;@H_301_3@}@H_301_3@else@H_301_3@{@H_301_3@return 0; @H_301_3@}@H_301_3@}@H_301_3@}@H_301_3@
调用:
代码如下:
301_3@if (ifrun('pooy',5)) { die("pooy is running"); }@H_301_3@
第二种:把进程写到文件里面,然后用file函数去读取然后去匹配字符串@H_301_3@
代码如下:
301_3@system('ps -ef |grep wget > /root/pooy.txt');@H_301_3@$arr=file('/root/pooy.txt');@H_301_3@$total=count($arr);@H_301_3@for($i=0;$i<$total;$i++){@H_301_3@$count=array();@H_301_3@if(stristr($arr[$i],'www/pooy') !== FALSE) {@H_301_3@//echo '"earth" not found in string';@H_301_3@$count[]='no';@H_301_3@ break;@H_301_3@}}if(count($count) >= 1 )@H_301_3@{@H_301_3@echo "A same programs are running";@H_301_3@exit();@H_301_3@}else@H_301_3@{@H_301_3@echo "start__________________________________________________";@H_301_3@}@H_301_3@
@H_301_3@注:”www/pooy” 是程序里面包含的字符串!
原文链接:https://www.f2er.com/php/24722.html