目录
锁申请和释放的外部脚本
文件锁实现
结果
需求: 并发写入时实现劝告锁。
1. 锁判断抽离为一个外部脚本,类似于库文件,在业务中调用这个脚本即可
2. 如何调用外部脚本?
3. 捕获退出信号来释放锁
锁申请和释放的外部脚本
#!/bin/bash
# 抽离文件锁申请方法
# 2022年1月3日11:24:18
function lockfile(){
trap "echo trapped;rm -rf "${lock_file}";exit 1" EXIT # 无论脚本以何种方式退出,只要不是kill -9,都会触
发这个信号。
lock_file=$1 #接受外部脚本调用参数
while [ -f "${lock_file}" ];do # 判断锁是否存在
echo "locked..."
sleep 1
done
touch "${lock_file}" # 如果不存在则创建
}
文件锁实现
lock1.sh
#!/bin/bash
# 文件实现锁功能
# 调用外部脚本判断是否申请锁成功
# 2022年1月3日11:29:49
# -f 从外部加载脚本, source加载脚本,加载之后lockfile在当前shell执行
# || 如果不存在则退出。
[ -f "lockfile.sh" ] && source lockfile.sh || { echo "lockfile.sh not exists";exit 1; }
lock_file=/var/lock/mylock
lockfile ${lock_file}
timeout 5 bash -c ' # 5s钟的timeout。 5s不释放锁自动释放。
while true;do
echo "lock1.sh : `date +'%T'`" >> /tmp/a.log
sleep 1
done'
lock2.sh
#!/bin/bash
# 文件实现锁功能
# 调用外部脚本判断是否申请锁成功
# 2022年1月3日11:29:49
# -f 从外部加载脚本, source加载脚本,加载之后lockfile在当前shell执行
# || 如果不存在则退出。
[ -f "lockfile.sh" ] && source lockfile.sh || { echo "lockfile.sh not exists";exit 1; }
lock_file=/var/lock/mylock
lockfile ${lock_file}
timeout 5 bash -c '
while true;do
echo "lock2.sh : `date +'%T'`" >> /tmp/a.log
sleep 1
done'
结果



