免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2275 | 回复: 0
打印 上一主题 下一主题

[新手入门] 如何确保 Shell 脚本只有一个实例运行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-04 17:31 |只看该作者 |倒序浏览

filedate=`date +"20%y%m%d"`
listdir=/usr/myscripts/mvlist
if   [ -d /TMP/ABC/AAA/${filedate} ];
then
#null command, don't do anything
:
else
mkdir /TMP/ABC/AAA/${filedate}
mkdir /TMP/ABC/JPG/IMAGE/${filedate}
fi
cd $listdir
listfile=`ls -lt|grep list|sed -n "1"p|awk '{print $9'}`
if [ -z "$listfile" ]; then
     echo "there is no list file"
     exit -1
fi
i=`ps -ef|grep [n]ew_mvbackup|wc -l`if [ $i -gt 1 ];
then
echo "wait for the other mvbackup finish!"
exit -1
else
while read LINE
do
filename=`echo $LINE|tr ';' '/'`
tmpdir=`echo $LINE|cut -d \; -f1|sed 's#/TFT\(.*\)#\1#'`
destdir=/TMP$tmpdir/${filedate}
mv $filename* ${destdir}
done >/tmp/archlog/mv.log
mv $listfile /usr/ivoscripts/bklist >>/tmp/archlog/mv.log
echo "finish mv $listfile at $date" >>/tmp/archlog/mv.log
fi
exit 0
红色字体部分可以参考下面一位牛人的文章:
        
如何确保 Shell 脚本只有一个实例运行
        
        作者:
Fenng
| 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及
版权声明
网址:
http://www.dbanotes.net/techmemo/how_to_run_shell_script_only_on_instance.html

        
   
   
        
            
在做维护的时候,经常要写一些脚本定期检查一些状态信息,而比较糟的时候可能该脚本在执行周期内没完成,接着第二个脚本又开始跑了。如何确保 Shell 脚本只有一个实例运行就成了一个比较有意思的话题。
必需要承认,要做到 100% 的完美可能需要长篇大论才可以做到。如果对于粒度要求不高,这里总结两个粗糙的方法。
一个是在脚本执行的时候判断某个文件的存在,如果不存在,则 touch
创建该文件(该文件看作一个"占座"文件),脚本执行完毕的时候删掉。第二个进程如果启动,判断有该文件存在,则退出或者是 sleep
几秒钟重新判断。这个方法的关键是在删掉"占座"文件的处理方式上。必需要考虑到程序异常、被 Kill 等多个情况。根据需要 trap 搞一下。
trap  和 kill 命令的 -l 参数能够列出你想要的内容

第二个方法是过滤脚本的名字(当然最好把脚本起个独特一点容易过滤的名字),计数,如果存在一个或者多个 instance , 则退出或者 sleep 等待。否则执行脚本。这个方法最简单,但是移植性似乎要差一点,需要考虑不同平台或 Shell 上的表现。
这两个方法都太粗糙了,经不起考究,但是对于 99% 的系统可能都足够用了。反过来说,如果一个系统对于脚本运行的粒度要求非常高,需要考虑到操作的原子性,那么 Shell 或许并不适合完成这个任务。
解决问题就好,过分炫技不可取。
--EOF--
        
    回帖中还有提到其他方法,详细可参考
地址:http://www.dbanotes.net/techmemo/how_to_run_shell_script_only_on_instance.html
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/56521/showart_1359694.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP