contab+flock实现防止重复执行的定时任务

4 篇文章 0 订阅

场景:需要实时处理redis队列消息

使用linux中的contab定时任务每隔一分钟执行一次,为防止一分钟后该脚本还没执行完,下个脚本重复执行,使用flock锁的方式

crontab -e

添加如下内容

*/1 * * * * flock -xw 60  /tmp/mytest.lock -c 'php /www/index.php'         

 

独占锁+等待时间60秒是防止后面进程一直堆积(个人理解不一定正确)

flock:

  • -s, --shared: 获得一个共享锁

  • -x, --exclusive: 获得一个独占锁

  • -u, --unlock: 移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁

  • -n, --nonblock: 如果没有立即获得锁,直接失败而不是等待

  • -w, --timeout: 如果没有立即获得锁,等待指定时间

  • -o, --close: 在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控

  • -c, --command: 在shell中运行一个单独的命令

  • -h, --help 显示帮助

  • -V, --version: 显示版本

 

执行的文件index.php里的内容(判断脚本执行的时间超过60秒就结束,这样下个等待中的进程就可以继续执行,实现无缝执行):

$start = time();
while(1){
    $file = file_get_contents('D:/abc.txt');
    $file .= "\r\n".date("Y-m-d H:i:s");
    file_put_contents('D:/abc.txt',$file);
    sleep(1);
    $end = time();
    if(($end-$start)>=60){
        exit;
    }
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值