免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: woodie
打印 上一主题 下一主题

[shell应用进阶]:限制同时运行脚本实例的个数 -- 串行化:换一个思路。  关闭 [复制链接]

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
1 [报告]
发表于 2006-10-12 08:45 |显示全部楼层
其实和r007的问题是一样的,如何确保token.sh在my-script之前唯一的运行?

另外

pid=`sed -n '/stop/ {s/\([0-9]\+\) \+stop/\1/p;q}' /tmp/p-aquire`

这一句会从管道读出所有等待写入的内容,会不会忽略脚本的请求?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2006-10-12 08:48 |显示全部楼层
原帖由 woodie 于 2006-10-12 08:36 发表

是有意安排的。^_^
因为token_file只有一行,内容是空格分隔的允许运行的进程号。
该行sed先读入只有一行的文件内容,删除一个进程号,回写到原文件。应该没有问题吧?^_^

token.sh是管理模块,设计时就是 ...



太大意了了吧

sed .. file >file会清空file

>file在命令运行前就清空了file ,sed 从哪儿读?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2006-10-12 09:26 |显示全部楼层
问题是即使现在有脚本已经交回了令牌,请求也会被忽略吧?
一个脚本已经交了牌,但你的处理在收回令牌以前已经忽略了其它的请求
可能我的讲解有误

token.sh唯一性的问题已经说过了。
写这个东西的目的不就是避免竞争条件么?如果放宽一点,我们只需要touch一个文件就行了。
现在把my-script的竞争问题避免了,但途径是转移到token.sh中去,好像不完美

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2006-10-12 09:28 |显示全部楼层
cat token_file | sed "s/\ $pid//" > token_file
在bash中仍然有可能会清空file

用ed吧

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2006-10-12 10:08 |显示全部楼层
>本来这个脚本要解决的问题就是高并发情况下可能发生的一些问题,高并发环境下,某些my-script的请求被拒绝是再正常不过的,这并不是世界末日。

这和之前r007的设计是一样的,只保证脚本不会多次运行,不保证脚本会运行,OK,这应该不是一个问题


>再说一次,token.sh是一个监控的模块,只需要运行一次
这点不敢苟同,没看到保证 token.sh正在运行而且唯一的任何操作,靠人脑计数么?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
6 [报告]
发表于 2006-10-12 10:26 |显示全部楼层
原帖由 r2007 于 2006-10-12 10:20 发表
PS:就是不清楚不同用户的进程能否通过管道建立通讯。

命名管道不就是为这个目的才产生的么?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
7 [报告]
发表于 2006-10-12 12:09 |显示全部楼层
问题不是人脑不够用,而是人脑太多,如何保证用户A运行了token.sh而用户B不去运行token.sh?如何保证B用户不会kill掉token进程?
如果要保证,是不是又回到了问题的起点?

[ 本帖最后由 waker 于 2006-10-12 12:10 编辑 ]

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2006-10-12 15:15 |显示全部楼层
pid=`sed -n '/stop/ {s/\([0-9]\+\) \+stop/\1/p;q}' /tmp/p-aquire`

这一点似乎还是有问题,会有stop被抛弃掉而没有收回number_of_running么?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
9 [报告]
发表于 2006-10-13 07:43 |显示全部楼层
to woodie&r007
1.挂在那里的原因是: read -t1命令根本没有被执行,命令一直处于准备 <namedpipe的状态,有兴趣的话先跑题讨论一下FIFO?

2.摸拟read -t的脚本实现以前也讨论过,我的思路是写一个read.sh,调用,在后台计时kill它就好了,这个不讨论了吧,没什么有价值的技巧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP