限制php脚本可以从cron运行的实例数量

时间:2014-01-06 17:14:19

标签: php cron limit instance

我有一个php脚本文件,每30秒通过cron作业运行一次并运行几分钟。我想限制它,所以只有最多的X实例可以同时运行,所以如果脚本的X量已经在运行,新的启动脚本将退出,当一个或多个正在运行的脚本完成下一个cron时然后能够成功启动脚本。

我发现了一些关于此的信息,但主要是为了限制只有一个实例,比如互斥锁。所以我在思考我可以用什么解决方案来实现我需要的东西,这里有一些我的想法:

  • 使用mysql数据库跟踪脚本执行
  • 将pid保存到文件,在脚本完成时删除pid
  • 运行简单的ps + grep命令

我倾向于使用ps命令方法,因为似乎更容易编码。有人知道更好的方法吗?

2 个答案:

答案 0 :(得分:0)

IMO,你最好的选择是ps + grep命令。

MySQL和pid解决方案都可以工作,但是无论出于什么原因,脚本总是有可能在它完成之前消失,从而留下一个不代表任何给定时间运行的脚本数量的计数器。 p>

答案 1 :(得分:0)

使用“ps u”:

if(ifFirstInstance()==false){
    echo "ERROR: script already running.\n";
    die;
    }

//continue here

function ifFirstInstance(){
    $basename = basename($_SERVER['SCRIPT_NAME']);
    ob_start();
    system("ps u", $return); 
    $result = ob_get_contents();
    ob_end_clean();
    $pieces = count(explode($basename, $result)); 
    $pieces--;
    if($pieces < 2)
        return true;
    else
        return false;
    }
相关问题