我正在使用执行PHP文件的crontab。我想实现flock()命令来帮助防止重复的crontabs一次运行。如果我有:
* * * * * php /var/www/html/welcome.php
如何添加此flock()命令?谢谢!
答案 0 :(得分:2)
试试这个:
$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.
答案 1 :(得分:0)
要完成您的答案,并且每分钟使用一次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