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

简介:

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

flock --help
flock (util-linux-ng 2.17.2)
Usage: flock -sxun fd#
flock -sxon file [-c] command...
flock -sxon 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计划任务做同步,写了一个rsync同步脚本whsir.sh,设置了30分钟同步一次服务端,但是可能由于其他某些因素导致,30分钟内没有同步完成,后台还会继续执行此计划任务,此时就能看到两个rsync同步同时在跑,这时候我们就需要flock命令来解决问题了。

原来我的计划任务:

/30 * /www/whsir.sh

使用flock后的计划任务:

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

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

目录
相关文章
|
4天前
|
Linux Python Perl
Linux命令删除文件里的字符串
Linux命令删除文件里的字符串
15 7
|
4天前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
6天前
|
Linux Perl
Linux之sed命令
Linux之sed命令
|
6天前
|
Linux
深入理解Linux中的cp命令:文件与目录的复制利器
深入理解Linux中的cp命令:文件与目录的复制利器
|
6天前
|
Linux Docker 容器
9. 同步执行Linux多条命令
9. 同步执行Linux多条命令
|
6天前
|
Linux Shell
10-10|linux命令查询 关键字在文本中出现的行数
10-10|linux命令查询 关键字在文本中出现的行数
|
6天前
|
存储 Linux Shell
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
这篇文章介绍了Vim编辑器的基本使用、常用命令和模式,以及Linux系统中用户和组的管理方法,包括用户和组相关文件如/etc/passwd、/etc/shadow和/etc/group的说明。
常用vim命令和vim基本使用及Linux用户的管理,用户和组相关文件
|
7天前
|
Linux Docker 容器
linux之docker命令
linux之docker命令
|
6天前
|
Ubuntu Linux Shell
10-21|在linux我如果修改了时间,什么命令可以恢复正确啊
10-21|在linux我如果修改了时间,什么命令可以恢复正确啊
|
6天前
|
Linux Perl
6-20|linux sed命令
6-20|linux sed命令
下一篇
无影云桌面