我有一个php脚本文件,每30秒通过cron作业运行一次并运行几分钟。我想限制它,所以只有最多的X实例可以同时运行,所以如果脚本的X量已经在运行,新的启动脚本将退出,当一个或多个正在运行的脚本完成下一个cron时然后能够成功启动脚本。
我发现了一些关于此的信息,但主要是为了限制只有一个实例,比如互斥锁。所以我在思考我可以用什么解决方案来实现我需要的东西,这里有一些我的想法:
我倾向于使用ps命令方法,因为似乎更容易编码。有人知道更好的方法吗?
答案 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;
}