在crontab中使用flock()

时间:2014-05-23 01:54:53

标签: php linux flock

我正在使用执行PHP文件的crontab。我想实现flock()命令来帮助防止重复的crontabs一次运行。如果我有:

* * * * * php /var/www/html/welcome.php

如何添加此flock()命令?谢谢!

2 个答案:

答案 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