zoukankan      html  css  js  c++  java
  • Shell脚本互斥设置

      参考: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运行

         

  • 相关阅读:
    Arduino mega 2560驱动安装失败(没有建立对验证码(TM)签名的目录的发布者信任)的解决方法
    Submile text3 安装使用技巧
    window.onload
    JS简单示例
    python类和对象的底层实现
    python类中方法加单下划线、双下划线、前后双下滑线的区别
    linux下json工具jq
    Django使用自定义的authentication登录认证
    django admin
    linux网卡桥接问题与docker网卡桥接问题
  • 原文地址:https://www.cnblogs.com/minseo/p/11481463.html
Copyright © 2011-2022 走看看