免费注册 查看新帖 |

Chinaunix

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

[系统管理] 抛砖引玉--关于控制同一程序并发进程的方法 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-06 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-25 09:42 |只看该作者 |倒序浏览
之前有过一个帖子,讨论,同一个程序,防止同时被执行的问题
,我的思路是,使用临时文件和当前线程同时判断,这样就能防止程序异常退出的问题,
代码简单,估计有高手能做的更好,或者找到可能的漏洞

  1. if [ -f ./tmp/$0.flag ]
  2. then
  3.     thisthread=`cat tmp/$0.flag`
  4.     if [ `ps -ef | grep -v grep | sed "s/  */ /g" | cut -d" " -f3 | grep $thisthread | wc -l` -eq 1 ]
  5.     then
  6.         exit
  7.     fi
  8. fi
  9. echo $ > tmp/$0.flag
  10. echo code----

复制代码

论坛徽章:
0
2 [报告]
发表于 2014-02-25 10:19 |只看该作者
回复 1# zhzhs

我也先说下我一般比较常用的方法,然后细看楼主.
  1. function lck
  2. {
  3. mkdir $1.lck
  4. while [ $? -ne 0 ]
  5. do
  6. sleep 1
  7. mkdir $1.lck
  8. done
  9. return 0
  10. }

  11. function unlck
  12. {
  13. rmdir $1.lck
  14. return 0
  15. }

  16. lck test
  17. #your code
  18. unlck test
复制代码

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2014-02-25 10:39 |只看该作者
echo $$ > tmp/$0.flag
第九行是这样吧

要放到code标签里面的话需要写3个$
  1. echo $$ > tmp/$0.flag
复制代码

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2014-02-25 10:44 |只看该作者
这种方案的缺陷在于:
假设当前脚本进程的pid是1234
第9行执行完毕之后1234被写入了文件
此时掉电了
系统重启之后另外一个程序的进程使用了1234这个pid
这时脚本就无法正常启动了

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
5 [报告]
发表于 2014-02-26 00:04 |只看该作者
各种可能各种考虑啊,大神就是大神

论坛徽章:
1
双子座
日期:2013-10-17 00:46:45
6 [报告]
发表于 2014-02-26 02:26 |只看该作者
回复 1# zhzhs


    最好用系统提供的,自己写,需要考虑的比较周全
参考:通过文件锁 Lockfile/flock 让脚本单实例运行
http://my.oschina.net/leejun2005/blog/108656

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-06 06:20:00
7 [报告]
发表于 2014-02-26 16:00 |只看该作者
回复 4# Shell_HAT


    大湿,那这样吧

标志文件里边写入线程时间和线程号,这样就万无一失了。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-06 06:20:00
8 [报告]
发表于 2014-02-26 16:04 |只看该作者
回复 6# xrzs1986


    perl啊,太高深了
只能摸拜

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2014-02-26 16:14 |只看该作者
回复 7# zhzhs


    Show me the code

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
10 [报告]
发表于 2014-02-26 16:17 |只看该作者
回复 6# xrzs1986


    filelock + pid 也存在4楼提到的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP