博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】在开发中,写定时脚本程序去执行任务是很常见的事情,但是如果设定每 5 分钟执行一次脚本,在特殊情况下脚本执行时间超过 5 分钟,则又会开启新的任务,而这往往会造成不可预估的事故。我们希望是任何时候只有一个脚本在执行,能够保证数据的可靠性,只有一个脚本任务执行完毕之后才能进行下一次的执行。那么这里就要用到今天主讲的 linux 文件锁 flock 来解决定时任务超时后出现多个任务同时执行的现象。
首先看一下 linux 文件锁 flock 的参数:
-s, --shared: 获得一个共享锁
-x, --exclusive: 获得一个独占锁
-u, --unlock: 移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁
-n, --nonblock: 如果没有立即获得锁,直接失败而不是等待
-w, --timeout: 如果没有立即获得锁,等待指定时间
-o, --close: 在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控
-c, --command: 在shell中运行一个单独的命令
-h, --help 显示帮助
-V, --version: 显示版本
通常我们设定一个定时任务的格式如下:
*/5 * * * * python3.7 /root/qr_code/accept_email.py
如果当前任务 A 超过定时间隔时间未执行完成,下一任务 B 开始执行时,flock 会去检测 /root/lock/qr_code.lock 的状态,如果是被锁定了,则结束任务 B ,等下一个定时周期再判断。格式如下:
*/5 * * * * flock -xn /root/lock/qr_code.lock -c 'python3.7 /root/qr_code/accept_email.py'
注:这种方式在实际工作中用的是比较多的,当然也可以通过在脚本添加代码来判断当前任务状态,来决定是否继续执行。
版权归 马富天个人博客 所有
本文标题:《linux 文件锁 flock 解决定时任务超时重复执行问题》
本文链接地址:http://www.mafutian.com/448.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
第 1 楼 干挂胶 2020-07-01 15:07:47 暂无分享
评论审核未开启 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
||