我正在使用执行PHP文件的crontab。我想实现flock()命令来帮助防止重复的crontabs同时运行。如果我有:在crontab中使用flock()
* * * * * php /var/www/html/welcome.php
我如何添加这个羊群()命令?谢谢!
我正在使用执行PHP文件的crontab。我想实现flock()命令来帮助防止重复的crontabs同时运行。如果我有:在crontab中使用flock()
* * * * * php /var/www/html/welcome.php
我如何添加这个羊群()命令?谢谢!
试试这个:
$fh = fopen('mutex.txt','r'); // Any convenient file (MUTual EXclusion)
flock($fh, LOCK_EX); // get exclusive lock. Will block until lock is acquired
// Do your exclusive stuff...
flock($fh, LOCK_UN); // release lock
fclose($fh); // close Mutex file.
有关完整的答案,当你使用crontab的每一分钟,你可能会遇到一个问题:
如果出于任何原因,你的剧本缺乏在1分钟内完成他的工作或脚本在某处失败并且没有移除锁(卡在'while'内),则下一个crontab将启动并保留在进程列表中,直到先前移除锁,依此类推......
更好的方法是:
$fh = fopen('/path/to/mutex.txt', 'r'); //Any convenient file (MUTual EXclusion)
if(!flock($fh, LOCK_EX | LOCK_NB)) //Exit if lock still active
exit(-1);
//Your code here
flock($fh, LOCK_UN); //release lock
fclose($fh); //close Mutex file.
这将避免处理PHP
的任何堆栈感谢您的答复!现在这是在我的welcome.php文件? – user3647894
嗨,感谢您的回答。但是我必须添加'r',如: $ fh = fopen('mutex.txt','r'); 因为我得到: fopen()期望至少有2个参数,1给出 是否正常?然而,它的工作很好,我尝试启动一个秒的PHP(CLI)和脚本不执行(等待)按预期。 –