2014-05-23 21 views
0

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

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

我如何添加这个羊群()命令?谢谢!

回答

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. 
+0

的任何堆栈感谢您的答复!现在这是在我的welcome.php文件? – user3647894

+0

嗨,感谢您的回答。但是我必须添加'r',如: $ fh = fopen('mutex.txt','r'); 因为我得到: fopen()期望至少有2个参数,1给出 是否正常?然而,它的工作很好,我尝试启动一个秒的PHP(CLI)和脚本不执行(等待)按预期。 –

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