linux 文件锁 flock 解决定时任务超时重复执行问题

学习笔记 马富天 2020-06-09 22:23:08 34 1

【摘要】在开发中,写定时脚本程序去执行任务是很常见的事情,但是如果设定每 5 分钟执行一次脚本,在特殊情况下脚本执行时间超过 5 分钟,则又会开启新的任务,而这往往会造成不可预估的事故。我们希望是任何时候只有一个脚本在执行,能够保证数据的可靠性,只有一个脚本任务执行完毕之后才能进行下一次的执行。那么这里就要用到今天主讲的 linux 文件锁 flock 来解决定时任务超时后出现多个任务同时执行的现象。

首先看一下 linux 文件锁 flock 的参数:

  1. -s, --shared:    获得一个共享锁  
  2. -x, --exclusive: 获得一个独占锁  
  3. -u, --unlock:    移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁  
  4. -n, --nonblock:  如果没有立即获得锁,直接失败而不是等待  
  5. -w, --timeout:   如果没有立即获得锁,等待指定时间  
  6. -o, --close:     在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控  
  7. -c, --command:   在shell中运行一个单独的命令  
  8. -h, --help       显示帮助  
  9. -V, --version:   显示版本

通常我们设定一个定时任务的格式如下:

  1. */5 * * * * python3.7 /root/qr_code/accept_email.py

如果当前任务 A 超过定时间隔时间未执行完成,下一任务 B 开始执行时,flock 会去检测 /root/lock/qr_code.lock 的状态,如果是被锁定了,则结束任务 B ,等下一个定时周期再判断。格式如下:

  1. */5 * * * * flock -xn /root/lock/qr_code.lock -c 'python3.7 /root/qr_code/accept_email.py'

注:这种方式在实际工作中用的是比较多的,当然也可以通过在脚本添加代码来判断当前任务状态,来决定是否继续执行。

版权归 马富天PHP博客 所有

本文标题:《linux 文件锁 flock 解决定时任务超时重复执行问题》

本文链接地址:http://www.numberer.net/448.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 MySQL 中的联合索引介绍【最左前缀匹配原则】 》 下一篇《 MySQL 中的 update join on 使用方法 》

所有评论

  1. 首页
  2. 上一页
  3. 1
  4. 下一页
  5. 尾页
  6. 第1页
  7. 每页12条
  8. 共1页
  9. 共1条
评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多