Linux 脚本引入锁机制

背景
有些场景下,你想让脚本在同一时间下不允许重复执行。此时,就需要用到锁的概念了。
方案
flock 工具
flock
是 Linux 自带的文件锁工具,可直接避免重复进程。
#!/usr/bin/env bash
flock -xn /tmp/rsync.lock -c "COMMAND"
if [ $? -ne 0 ]; then
echo "[ $(basename $0 .sh) ] 已在运行,跳过本次执行!"
exit 1
fi
参数注解:
-x
: 独占锁;-n
: 非阻塞模式(若锁被占用,立即退出);-c
: 指定需要执行的命令。
锁文件
自行创建一个锁文件,执行之前判断锁文件是否存在,不存在执行,反之。
#!/usr/bin/env bash
LOCK_FILE="/tmp/cmd.lock"
# 判断锁文件
if [ ! -f "$LOCK_FILE" ]; then
# 创建锁文件
touch "$LOCK_FILE"
# 确保锁文件在脚本退出时被删除
trap 'rm -f "$LOCK_FILE"' EXIT
# 执行命令
COMMAND
else
echo "[ $(basename $0 .sh) ] 已在运行,跳过本次执行!"
exit 1
fi
该方法有个弊端,如果你提前创建了同名的锁文件,那么脚本就永远都会跳过执行!
查询进程
...
小结
建议使用flock工具来实现。