【发布时间】:2014-05-23 01:54:52
【问题描述】:
我正在使用一个执行 PHP 文件的 crontab。我想实现flock() 命令来帮助防止重复的crontabs 一次运行。如果我有:
* * * * * php /var/www/html/welcome.php
如何添加这个flock() 命令?谢谢!
【问题讨论】:
我正在使用一个执行 PHP 文件的 crontab。我想实现flock() 命令来帮助防止重复的crontabs 一次运行。如果我有:
* * * * * php /var/www/html/welcome.php
如何添加这个flock() 命令?谢谢!
【问题讨论】:
试试这个:
$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
【讨论】: