Shell脚本互斥设置
shell脚本为了防⽌同时执⾏相同的脚本需要设置互斥锁
简单⽅法,脚本执⾏开始⽣成⼀个锁⽂件,如果该锁⽂件存在则代表有⼈在执⾏,就退出脚本
test.sh
#!/bin/bash
LOCKFILE="/tmp/test_lock"
if [ -f ${LOCKFILE} ]
then
echo "someon do the same thing"
exit
else
touch ${LOCKFILE}
fi
sleep 90shell最简单脚本
if [ -f ${LOCKFILE} ]
then
rm -rf ${LOCKFILE}
fi
sleep模拟脚本在执⾏其他操作
打开⼀个终端执⾏脚本,然后在脚本还未结束的时候在打开另外⼀个终端执⾏会提⽰,然后退出
假如在执⾏过程中意外或者强制退出了则脚本没有执⾏到最后删除锁⽂件的步骤,下⾯写⼀个脚本避免该问题
#!/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:脚本运⾏报错
test.sh: 2: test.sh: Bad substitution
需要⽤bash运⾏
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论