免费注册 查看新帖 |

Chinaunix

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

如何保证shell脚本不被重复执行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-14 18:06 |只看该作者 |倒序浏览
也就是说当脚本已经在执行的时候,不允许再次执行这个脚本,保证唯一性。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-01-14 18:17 |只看该作者

如何保证shell脚本不被重复执行?


  1. ps -e|grep procname||procname start
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-01-14 18:19 |只看该作者

如何保证shell脚本不被重复执行?

在脚本开始加入判断是否运行的条件,大致如下吧,需要调试:
set a = `ps -ef|grep $0|grep -v grep |wc -l`
if ( $a>0) then
exit
endif

论坛徽章:
0
4 [报告]
发表于 2005-01-14 18:24 |只看该作者

如何保证shell脚本不被重复执行?

这样就不是通过脚本自身来实现唯一性了。
希望是像应用程序一样,可以在脚本的开始做判断。

论坛徽章:
0
5 [报告]
发表于 2005-01-14 18:37 |只看该作者

如何保证shell脚本不被重复执行?

原帖由 "icewolf_li" 发表:
这样就不是通过脚本自身来实现唯一性了。
希望是像应用程序一样,可以在脚本的开始做判断。

把那段脚本加到你运行的程序的前面不就行了.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-01-14 18:40 |只看该作者

如何保证shell脚本不被重复执行?

放在crontab里也可以

论坛徽章:
0
7 [报告]
发表于 2005-01-14 22:47 |只看该作者

如何保证shell脚本不被重复执行?

http://bbs.chinaunix.net/forum/viewtopic.php?p=3108015&highlight=icesummit#3108015

论坛徽章:
0
8 [报告]
发表于 2005-01-14 23:07 |只看该作者

如何保证shell脚本不被重复执行?

原帖由 "welcome008" 发表:
在脚本开始加入判断是否运行的条件,大致如下吧,需要调试:
set a = `ps -ef|grep $0|grep -v grep |wc -l`
if ( $a>0) then
exit
endif


要知道你的脚本一运行立刻就产生了进程。
所以不管程序是否已经在运行
ps -ef|grep $0|grep -v grep |wc -l始终都会大于0的。
最好根据-o etime 来判断。

论坛徽章:
0
9 [报告]
发表于 2005-01-14 23:37 |只看该作者

如何保证shell脚本不被重复执行?

来个已测试过的看看是否存在哪些问题。
  1. #!/bin/sh
  2. cnt=`ps -ef -o etime -o args | grep aaa.sh | awk '((substr($1,1,1)>0)||(substr($1,length($1)-1)>0))' | wc -l`
  3. if [ $cnt -ne 0 ];then echo "Sorry, the program is running.."; exit 0; fi
  4. while [ 1 ];do sleep 2; done
复制代码

结果如下:

  1. bash-2.05$ nohup aaa.sh &
  2. [1] 1787
  3. bash-2.05$ 将输出发送到 nohup.out

  4. [1]+  Done                    nohup aaa.sh
  5. bash-2.05$ aaa.sh
  6. Sorry, the program is running..
  7. bash-2.05$
复制代码


大概意思就是判断进程的运行时间是否大于0。

论坛徽章:
0
10 [报告]
发表于 2005-01-15 01:11 |只看该作者

如何保证shell脚本不被重复执行?

原帖由 "ZealeS" 发表:


要知道你的脚本一运行立刻就产生了进程。
所以不管程序是否已经在运行
ps -ef|grep $0|grep -v grep |wc -l始终都会大于0的。
最好根据-o etime 来判断。



那让他大于1如何?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP