美文网首页
进程管理-如何确保shell脚本只有一个实例运行

进程管理-如何确保shell脚本只有一个实例运行

作者: 狗狗胖妞 | 来源:发表于2019-04-09 18:08 被阅读0次

    如何确保shell脚本只有一个实例运行

    参考文档: https://blog.csdn.net/shenwansangz/article/details/50113613

    如果对于粒度要求不高,这里总结两个粗糙的方法

    一个是在脚本执行的时候判断某个文件的存在,如果不存在,则 touch创建该文件(该文件看作一个"占座"文件),脚本执行完毕的时候删掉。第二个进程如果启动,判断有该文件存在,则退出或者是 sleep几秒钟重新判断。这个方法的关键是在删掉"占座"文件的处理方式上。必需要考虑到程序异常、被 Kill 等多个情况。根据需要 trap 搞一下。

    trap 和 kill 命令的 -l 参数能够列出你想要的内容

    第二个方法是过滤脚本的名字(当然最好把脚本起个独特一点容易过滤的名字),计数,如果存在一个或者多个 instance , 则退出或者 sleep 等待。否则执行脚本。这个方法最简单,但是移植性似乎要差一点,需要考虑不同平台或 Shell 上的表现。

    #!/usr/bin/bash
    
    lock_file=/var/run/rsync_files.pid
    
    if [ -e $lock_file ];then
       echo "Other instance is running!"
       exit 0
    else
       touch $lock_file
       chmod 600 $lock_file
    fi
    
    trap "rm -f ${lock_file}; exit" 0 1 2 3 9 15
    
    while :
    do
            sleep 2
            echo "hello $$"
    done
    

    相关文章

      网友评论

          本文标题:进程管理-如何确保shell脚本只有一个实例运行

          本文链接:https://www.haomeiwen.com/subject/lkviiqtx.html