Shell脚本互斥设置
参考:https://blog.csdn.net/hanjiezz/article/details/79571703
shell脚本为了防止同时执行相同的脚本需要设置互斥锁
简单方法,脚本执行开始生成一个锁文件,如果该锁文件存在则代表有人在执行,就退出脚本
test.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash LOCKFILE= "/tmp/test_lock" if [ -f ${LOCKFILE} ] then echo "someon do the same thing" exit else touch ${LOCKFILE} fi sleep 90 if [ -f ${LOCKFILE} ] then rm -rf ${LOCKFILE} fi |
sleep模拟脚本在执行其他操作
打开一个终端执行脚本,然后在脚本还未结束的时候在打开另外一个终端执行会提示,然后退出
假如在执行过程中意外或者强制退出了则脚本没有执行到最后删除锁文件的步骤,下面写一个脚本避免该问题
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash if [ -f /var/run/ ${BASH_SOURCE[0]}.pid ] then ps -ef| grep - v grep | grep ${BASH_SOURCE[0]}| grep ` cat /var/run/ ${BASH_SOURCE[0]}.pid` >> /dev/null if [ $? - eq 0 ]; then echo "someone do the same thing" exit 1 fi fi echo $$ > /var/run/ ${BASH_SOURCE[0]}.pid sleep 90 |
PS:${BASH_SOURCE[0]}是获取当前脚本名
判断过程为
1,判断脚本pid是否存在
2,如果脚本pid存在,检查当前是否运行该脚本,如果运行了并且是以pid文件中的pid运行的则代表有其他人在运行改脚本则退出
3,如果没有一pid文件中的pid运行的脚本则代表没有人运行该脚本,则把运行的pid写入pid文件即可
PS:脚本运行报错
1 | test .sh: 2: test .sh: Bad substitution |
需要用bash运行
分类:
Linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!