Shell脚本互斥设置

匿名 (未验证) 提交于 2019-12-02 23:59:01

  参考:https://blog.csdn.net/hanjiezz/article/details/79571703

  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 90 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运行

     

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!