linux中防止shell脚本重复执行

今天在jenkins里部署的时候,由于开发们多次频繁的提交的代码,造成jenkins里的shell脚本在那频繁的部署,为了阻止这样的问题,专门找了个防止重复执行的代码.下面来看代码:
#!/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."
这样就能保证my.lock只能被一个进程创建出来。比touch靠谱多了。
trap 可以捕获各种信号,然后做出处理:
INT 用来处理 ctrl+c取消脚本执行的情况。
TERM 用来处理 kill -TERM pid 的情况。
EXIT 不清楚
另外,对于 kill -9 无效.

时间: 2024-09-23 02:58:06

linux中防止shell脚本重复执行的相关文章

linux中的shell脚本管理(二)

在Shell脚本中执行使用if语句的好处是:可以根据特定的条件(eg:判断备份目录是否存在)来决定是否执行某项操作,当满足不同的条件时执行不同的操作(eg:备份目录不存在则创建该目录,否则跳过操作).该文将分别从条件测试操作,if语句结构,应用示例这三个方面讲解if语句在Shell脚本中的应用. 1.条件测试操作: 需要在Shell脚本中有选择性地执行任务时,首先面临的问题就是,如何设置命令执行的条件? 在Shell环境中,可以根据命令执行后返回状态值来判断该命令是否成功执行,当返回值为0是表示

如何在Linux中启用Shell脚本的调试模式

脚本是存储在一个文件的一系列命令.在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令. 在学习脚本或写脚本的初期阶段,我们通常从写小脚本或者几行命令的短脚本开始,调试这样的脚本时我们通常无非就是通过观察它们的输出来确保其正常工作. 然而,当我们开始写非常长或上千行命令的高级脚本,例如改变系统设置的脚本,在网络上执行关键备份 等等,我们会意识到仅仅看脚本输出是不足以在脚本中找到 Bug 的! 因此,在 Linux 系列

如何在 Linux 中启用 Shell 脚本的调试模式

脚本是存储在一个文件的一系列命令.在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令. 在学习脚本或写脚本的初期阶段,我们通常从写小脚本或者几行命令的短脚本开始,调试这样的脚本时我们通常无非就是通过观察它们的输出来确保其正常工作. 然而,当我们开始写非常长或上千行命令的高级脚本,例如改变系统设置的脚本,在网络上执行关键备份 等等,我们会意识到仅仅看脚本输出是不足以在脚本中找到 Bug 的! 因此,在 Linux 系列

在Linux中使用shell脚本自动创建/移除并挂载交换文件

几天前我们写了一篇关于在 Linux 中 3 种创建交换文件的方法,它们是常见的方法,但是需要人工操作. 今天我发现了一个 Gary Stafford[1] 写的 shell 小脚本(两个 shell 脚本,一个用于创建交换文件,另外一个用于移除交换文件),它可以帮助我们在 Linux 中创建/移除并且自动挂载交换文件. 默认这个脚本创建并挂载 512MB 的交换文件.如果你想要更多的交换空间和不同的文件名,你需要相应地修改脚本.修改脚本不是一件困难的事,因为这是一个容易上手而且很小的脚本. 推

linux中利用Shell脚本自动提交网站404死链到搜索引擎

  Shell脚本 说做就做,简单的写了个 Shell 脚本就搞定了! 脚本名称:网站死链生成脚本 脚本功能:每天定时分析网站前一天的 nginx 日志, 然后提取状态码为404并且UA为百度蜘蛛的抓取路径,并写入到网站根目录下的 death.txt 文件,用于提交百度死链. 脚本代码: #!/bin/bash #Desc: Death Chain File Script #Author: ZhangGe #Blog: http://你的域名/5038.html #Date: 2015-05-0

linux中利用shell脚本监控网站状态异常

  最近刚好需要测试一下新建站的稳定性,所以写了个SHELL脚本放到本机(最近换了mac本),能够实时查看你需要监控的WEB页面状态,并发送到指定邮箱.     这里赞一下OS X自带有crontab计划任务,可以直接在本机测试脚本啦^_^    代码如下 复制代码 # vi check_web_alive.sh --------------------------------------------------------------------- #!/bin/bash PATH=/bin:

linux中的shell脚本管理(一)

一:Shell的作用及常见种类: Shell是一个特殊的应用程序,他介于操作系统内核与用户之间,负责接受用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行.因此,Shell程序在系统中充当了一个"命令解释器"的角色,eg:微软的cmd.exe也属于Shell程序: 在Unix/Linux操作系统中,能够使用的Shell程序有很多种,功能也比微软的"cmd.exe"要强大的多,下面就是常见到的Shell程序环境,(功能可以自己去了解下:) Bsh:

linux中使用shell脚本检测内存使用情况

 公司服务器最近两天老是因为内存被使用满而造成死机,实在是受不了老叫机房的人去帮忙重启,专门写了个脚本来释放下内存,当然这台服务器不是太重要,我粗鲁的处理方式估计不会适合大多数服务器,请大家使用之前先考虑清楚,不然造成数据丢失就不关我的事了. 脚本内容: cat check-mem.sh #!/bin/bash mem_total=`free -m | awk 'NR==2' | awk '{print $2}'` mem_free=`free -m | awk 'NR==3' | awk '{

linux中使用shell脚本配置iptables防火墙

 要放假了,今天实在是闲得蛋疼,本来只想写个配置iptables的脚本的,没想到被自己搞得这么复杂了,还是分享出来给大家,有兴趣的可以自己再改改.   ps:本脚本只支持centos5和centos6,不支持centos 7,并且在脚本里也限制了. 脚本内容: #!/bin/sh # By rocdk890 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH #Begin start(){