栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

shell实战案例- 实现文件锁

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shell实战案例- 实现文件锁

目录

锁申请和释放的外部脚本

文件锁实现

结果


需求: 并发写入时实现劝告锁。

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'

​

结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/693753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号