如何判断一个PHP脚本是否在运行?

notrynosuccess 2009-09-15 04:51:20
问题如题,由于项目需要,有一个永久运行的PHP脚本,示例代码如下:
ignore_user_abort(); // 无视用户断开
set_time_limit(0); // 无执行时间限制

while (true)
{
echo 'test'; // 这里仅为说明使用,实际是业务逻辑处理代码
sleep(2);
}

如果是第一次启动运行该脚本当然没有什么问题,问题是运行之后,如果操作人员再次点击启动该脚本,期望的效果是先进行一下判断该脚本是否已经在运行(不然很浪费处理资源),不知能有什么方法可以达到我说的这种目的呢?我试过文件锁定,即在上面的代码中加入锁定本页面命令,期望apache再次执行该脚本时发现已经被它之前运行的脚本锁定,就不再执行该脚本了,可结果不行,不知是不是因为apache的执行脚本级别与脚本运行级别不是同一级别?另外说下我的配置环境,Windows XP + Apache 2.2.11 + PHP 5.2.10,我知道像Unix环境下有grep命令判断一个进程是否在运行,不过我这里并不是一个单独的进程(比如apache的进程为httpd.exe),而只是一个PHP脚本,我不知道能用什么方法来判断了?!
...全文
565 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
notrynosuccess 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 klend 的回复:]
难到我了 帮你顶吧

确实linux下面相对好实现一些

研究一下命令提示符

为什么你们会用windowsxp 这么奇怪的服务器
[/Quote]

呵呵,只是开发环境暂时是这样的配置,以后真实的生产环境不一定是这样,但是数据库服务器一定是Windows,因为运营方需要SQL Server数据库。
notrynosuccess 2009-09-16
  • 打赏
  • 举报
回复
重点感谢sdomain和dahaidao的思路启发!大家接分吧!
dahaidao 2009-09-16
  • 打赏
  • 举报
回复
向数据库或文件里写一个最后执行完的时间吧(每循环一次或几次写一次,根据你的时间情况),
下次运行的时候判断一下这个时间与当前时间的差,如果超过时了还没有写入,那就是没有在运行。
这样可能会对效率有影响啊。
「已注销」 2009-09-15
  • 打赏
  • 举报
回复
补充一下 用pid文件会比较好..这样可以检查目标进程是否存在, 避免只使用文件导致意外退出后无法执行~
「已注销」 2009-09-15
  • 打赏
  • 举报
回复
用文件锁不就可以了...
运行的时候把pid或者建个xxx.lock文件,
程序结束时清理锁文件.
每次运行就去检查文件是否存在,
存在则退出执行
sdomain 2009-09-15
  • 打赏
  • 举报
回复
楼主的不保险,如果程序意外结束了,文件会一直存在的,那后来的永远启动不了了
LuciferStar 2009-09-15
  • 打赏
  • 举报
回复
也可以一开始运行,就读一个文件。如果这个文件存在,就退出。
如果不存在,就创建,然后开始工作。
sdomain 2009-09-15
  • 打赏
  • 举报
回复
不太同意楼主的方案,其实在PHP执行的时候,实际上,apache(或其它WEB服务器)在启动时,就把PHP加载到内存了,
用户访问页面时,只是由WEB服务器把脚本交给内存中的PHP去执行,外界是无法通过进程去判断哪个页面是否在执行的,
我觉得你可以通过以下的方法去实现:
建立一个临时表,
如tmp
时面就有一个字段A
程序在运行过种中,每隔一小段时间把这个A字段内容设为1,这个时间最好短点,如5秒次,可以通过一句SQL就可实际:
update tmp set A=1 where A!=1;
程序在动时,把这个A字段设为0
等5秒后,如果这个字段变成1了,说明有程序在跑,否则说明程序没跑了,
基实也可以通过写日志啊什么的,
只要让原程序做一些外面能看到的操作就可以了,
如向一个文件写入当前的时间,
新启动的程序,如果在指定时间发现这个时间值变了,说明原程序在跑。
foolbirdflyfirst 2009-09-15
  • 打赏
  • 举报
回复
windows xp如何查看任务计划?AT?
klend 2009-09-15
  • 打赏
  • 举报
回复
难到我了 帮你顶吧

确实linux下面相对好实现一些

研究一下命令提示符

为什么你们会用windowsxp 这么奇怪的服务器

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧