首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在crontab中使用flock()

在crontab中使用flock()
EN

Stack Overflow用户
提问于 2014-05-23 01:54:52
回答 2查看 1.5K关注 0票数 0

我使用的是执行PHP文件的crontab。我希望实现flock()命令,以帮助防止重复的crontab一次运行。如果我有:

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-23 02:15:23

试试这个:

代码语言:javascript
复制
$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.
票数 2
EN

Stack Overflow用户

发布于 2015-06-24 12:28:03

为了完成您的回答,并且当您每分钟使用crontab时,您可能会遇到一个问题:

如果由于任何原因,您的脚本无法在1分钟内完成他的任务,或者脚本在某个地方失败,并且没有移除锁(卡在‘the’.内),则下一个crontab将开始并停留在您的进程列表中,直到上次删除他的锁,等等……

一个更好的办法是:

代码语言:javascript
复制
$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堆栈。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23819823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档