我使用的是执行PHP文件的crontab。我希望实现flock()命令,以帮助防止重复的crontab一次运行。如果我有:
* * * * * php /var/www/html/welcome.php
我如何添加这个flock()命令?谢谢!
发布于 2014-05-23 02:15:23
试试这个:
$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.发布于 2015-06-24 12:28:03
为了完成您的回答,并且当您每分钟使用crontab时,您可能会遇到一个问题:
如果由于任何原因,您的脚本无法在1分钟内完成他的任务,或者脚本在某个地方失败,并且没有移除锁(卡在‘the’.内),则下一个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堆栈。
https://stackoverflow.com/questions/23819823
复制相似问题