一般情况下,我们利用crontab执行计划任务,间隔都不会太短,比如一天一次,甚至一周乃至一月一次。
所以一般而言,这都不会有什么问题。
但是如果在某些极端情况下:例如我们需要每次执行的计划任务需要完全结束,才可以执行下一次,否则会导致出问题。
那么这个时候【文件锁】(flock)就发挥作用了。
下面介绍一个简单的文件锁(flock)用法:
常见的参数:
flock -xn 锁文件 -c "shell"
flock -x 锁文件 -c "shell"
以上内容看起来不太直观,那么先来解释一下:
flock是文件锁的命令,两行的参数相差一个 n ,第一行 -xn, 使用这个参数,当执行发现文件被锁,则后面的shell命令/脚本直接执行失败。第二行则不同,单独使用 -x 时,如果发现文件被锁,则会等待文件锁解除时,再执行后面的shell命令/脚本。
注意,在这里,【锁文件】本身没有实在的意义,它只是一个标记,所以可以手工随意touch一个。
下面是我 crontab 的其中一行:
*/1 * * * * flock -x /root/file.lock -c "sh /root/file.sh"