linux下使用flock对crontab加锁

使用flock对crontab加锁

在使用crontab配置脚本时,在执行时间较长会出现很多冗余进程,使用flock对其进行加锁,就不会再出现这种问题
如:
如果设定了任务每1分钟执行一次,但有可能执行该任务需要花费2分钟,这时系统会再执行任务。导致两个相同的任务在执行。这种情况下可能会出现一些并发问题,严重时会导致出现脏数据/性能瓶颈的恶性循环。
通过使用flock建立排它锁可以规避这个问题,如果一个进程对某个加了排他锁,则其它进程无法加锁,可以选择等待超时或马上返回。在这里插入图片描述

* * * * * flock -xn /root/yck/cl.lock -c 'sh /root/yck/cl.sh >> /root/yck/cl526.log 2>&1'
flock -s --shared: 
获得一个共享锁
flock -x --exclusive: 
获得一个独占锁/排他锁
flock -u --unlock:
移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁。
flock -n --nonblock:    
如果没有立即获得锁,直接失败而不是等待
flock -w --timeout: 
如果没有立即获得锁,等待指定时间。
flock -o --close:
在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的控制。
flock -c --command: 
在shell中运行一个单独的命令

由于没有加锁,会导致资源浪费以及进程一直在执行,会导致脚本重复运行
使用flock加锁后不会重复运行:
其中test.lock只需要有最大读写权限 chmod 777 test.lock
其中涉及到一个小知识点,就是如何杀死多余进程:
使用pkill更加便捷

脚本解释 flock -xn /home/jingguoliang/project/sh/paysleep.lock -c
对后面的脚本进程加文件锁,格式为:flock 参数 锁文件地址 参数 ‘/bin/sh
/home/jingguoliang/project/sh/paybiz.sh >/dev/null 2>&1’ 执行脚本地址及打印日志
注意:一定要加上引号,否则脚本不执行!!!

猜你喜欢

转载自blog.csdn.net/weixin_45163291/article/details/130886874
今日推荐