欢迎光临散文网 会员登陆 & 注册

用flock命令解决Linux计划任务重复执行

2021-08-27 13:11 作者:快手老麦  | 我要投稿

在做计划任务的时候,可能由于某些问题,任务没有执行完成,导致任务重复的运行,解决这个问题,只需要一个flock命令就可以了。


flock --help

flock (util-linux-ng 2.17.2)

Usage: flock [-sxun][-w #] fd#

flock [-sxon][-w #] file [-c] command...

flock [-sxon][-w #] directory [-c] command...

-s --shared Get a shared lock #获得一个共享锁

-x --exclusive Get an exclusive lock #获得一个独占锁,这是默认的

-u --unlock Remove a lock #删除一个锁,通常是不需要的,因为在文件关闭时锁会自动删除

-n --nonblock Fail rather than wait #如果没有立即获得锁,直接失败而不是等待

-w --timeout Wait for a limited amount of time #如果没有立即获得锁,等待指定时间

-o --close Close file descriptor before running command #在执行命令之前关闭保持锁的文件描述符

-c --command Run a single command string through the shell #在shell中运行一个单独的命令

-h --help Display this text #显示帮助

-V --version Display version #显示版本


例:


我要用rsync计划任务做同步,写了一个日志切割脚本logsplit.sh,设置了30分钟同步一次服务端,但是可能由于其他某些因素导致,30分钟内没有同步完成,后台还会继续执行此计划任务,此时就能看到两个rsync同步同时在跑,这时候我们就需要flock命令来解决问题了。


原来我的计划任务:


*/30 * * * * /www/logspli.sh


使用flock后的计划任务:


*/30 * * * * flock -xn /tmp/demo.lock -c /www/logspli.sh


这样的话,当前计划任务whsir.sh如果没有运行完,下一个任务会判断demo.lock被锁定,直接失败,等待下次再判断。


用flock命令解决Linux计划任务重复执行的评论 (共 条)

分享到微博请遵守国家法律