防止shell脚本重复执行

post by rocdk890 / 2016-7-8 18:10 Friday linux技术
  今天在jenkins里部署的时候,由于开发们多次频繁的提交的代码,造成jenkins里的shell脚本在那频繁的部署,为了阻止这样的问题,专门找了个防止重复执行的代码.下面来看代码:
cat /root/soft_shell/check.sh
#!/bin/bash
 
LOCK_NAME="/tmp/my.lock"
if ( set -o noclobber; echo "$$" > "$LOCK_NAME") 2> /dev/null; 
then
        trap 'rm -f "$LOCK_NAME"; exit $?' INT TERM EXIT
 
        
### 开始正常流程
        
### 正常流程结束
 
        
### Removing lock
        rm -f $LOCK_NAME
        trap - INT TERM EXIT
else
        echo "Failed to acquire lockfile: $LOCK_NAME."
        echo "Held by $(cat $LOCK_NAME)"
        exit 1
fi
 
echo "Done."

set -o noclobber 的意思:
If set,bash does not overwrite an existing file with the >, >&, and <> redirection operators.
这样就能保证my.lock只能被一个进程创建出来。比touch靠谱多了。
trap 可以捕获各种信号,然后做出处理:
INT 用来处理 ctrl+c取消脚本执行的情况。
TERM 用来处理 kill -TERM pid 的情况。
EXIT 不清楚
另外,对于 kill -9 无效.

ps:http://blog.liudongkai.com/2012/11/08/prevent-shell-running-at-the-same-time/
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-661.html

标签: shell 脚本 执行 同时 重复

评论: