判断一个PHP脚本是否正在运行

2015-1-22 Linyuting.cn 博客札记

    写一个PHP程序,用到计划任务的时候,在设计程序的时候不允许重复运行cron.php文件,而计划任务是不断运行的,他根本不知道自己是否正在运行。

    网上大多数的想法都是运行PHP程序的时候:

        判断是否存在文件a  ->  存在 -> 直接退出

        判断是否存在文件a  ->  不存在 -> 创建文件a -> 脚本运行完毕 -> 删除文件a

    但是这有一个致命的缺点,当脚本不正常退出的时候(比如Timeout),文件a没有被删除,下次运行该文件的时候就直接退出了。

    改进案:



<?php

$file = "running.pid";

if(file_exists($file))
{
	if(!unlink($file))
	{
		exit("程序已经运行");  //这个时候PHP会抛出permission denied然后退出
	}
}

$f = fopen($file,"w");//注意不要把$f指针关闭了,这里并没有把指针$f释放,以至于前面的unlink()无法把running.pid删除抛出permission denied



/*


这里是要运行的代码


*/


fclose($f);//这里才关闭文件
unlink($file);//删除文件
//这有便达到了判断某个PHP脚本是否运行的目的

?>



    测试了下,curl配合 set_time_limit(0); 使用效果非常满意。


标签: php

发表评论:

本站由emlog驱动 粤ICP备15042739号