3

在我的系统中,我安排了一个 PHP 作业每分钟运行一次。

现在我希望如果该作业的 1 个实例正在运行并且需要超过 1 分钟,则每分钟后启动的新实例会检查是否有任何先前的实例正在工作并且是否有任何先前的实例正在运行,新的实例会自行杀死。 .我正在尝试 system() 命令,但无法弄清楚。

任何建议

4

2 回答 2

8

对锁定文件使用独占文件锁定。一旦进程结束执行,锁就会自动释放。

<?php    
$fp = fopen("/var/tmp/your.lock", "w");
if (!flock($fp, LOCK_EX|LOCK_NB)) { // try to get exclusive lock, non-blocking
    die("Another instance is running");
} 

[... continue with the script ...]

见:http ://www.php.net/manual/en/function.flock.php

于 2011-01-26T12:34:50.850 回答
1

有几种解决方案。所有人的共同点是在作业开始时设置标志,在作业完成时清除标志。并在作业开始时检查该标志的存在。

在伪代码中:

if ( flag is set )
  exit

set flag

do some stuff

clear flag

例如,您可以创建一个文件作为您的标志。或者您可以在 memcache 中创建一个键并将其用作您的标志。或数据库,或其他东西。

于 2011-01-26T12:34:14.687 回答