一种限制shell脚本并行执行的方法技术

技术编号:2835998 阅读:822 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种限制shell脚本并行执行的方法,应用于linux和unix平台,包括:当有shell脚本需要执行时,脚本模块处理器向管道写入请求;令牌模块处理器在管道另一端顺序读取所述请求,当有令牌空闲时,将令牌按请求的先后顺序发给先请求的shell脚本进程,直到没有令牌可用;得到令牌的进程允许运行;没有得到令牌的进程则退出,不会执行。本发明专利技术引入的令牌概念,利用linux的管道,实现并行执行的多个进程进入临界区时的“串行化”,利用单独的死锁检测脚本,来检测死锁,没有多个并发进程对同一个令牌进行操作,可以有效地解决死锁的问题。

【技术实现步骤摘要】

本专利技术涉及linux的脚本运行控制,尤其涉及一种在linux和unix平台上限制shell脚本并行执行的方法
技术介绍
目前随着linux的广泛使用,shell脚本也得到了大量的运用,但是在实际应用的过程中,往往要求出现这种需求,同一个脚本同一时刻只允许一个shell脚本运行,也就是说同一个时刻不允许两个以上相同的脚本都在运行。目前广泛采用的“限制shell脚本同时允许的”技术有两种,但都存在一定的不足第一种用ps一类命令找出已经运行脚本的数量,如果大于等于2,就退出当前脚本,等于1,则运行。这种技术的缺点是首先,ps取得脚本文件进程数量就有很多陷阱,例如有时无法ps到脚本文件的名称,即使可以ps到脚本名,如果用到管道的话,由于子shell的原因,在大多数平台下会得到奇怪的结果,有时得到数字a,有时又得到数字b,让人无所适从。就算计数的问题已经解决了,还有问题如果两个脚本实例同时计数,显然数字都应该等于2,于是两个都退出了。于是在这一时间点上没有一个脚本在执行。第二种加锁的方法。就是脚本在执行开始先试图得到一个“锁”,得到则继续执行,反之就退出,这种方法的缺点是有两个加锁时如何避免多个进程同时对同一个共享数据进行某种处理,而结果又取决于执行的顺序、怎么样避免出现“死锁”的情况;对于前一个缺点,目前广泛采用的“创建目录”、“符号连接”、“文件首行竞争”等技术可以基本解决;后一个缺点解决起来很麻烦,问题的难点在于如何找到一种“原子”操作,将检测死锁和删除死锁的动作一步完成,否则又会出现与加锁时同样的问题。例如进程1检测到死锁;进程2监测到死锁;进程1删除死锁;进程x(也可能是进程1自己)加锁,开始运行;进程2(错误地)删除死锁;此时锁没有占用,于是任意进程都可以加锁并投入运行。这样又出现了两个进程同时运行的情况,目前还没有找到一个好的删除“死锁”的原子操作。
技术实现思路
本专利技术要解决的技术问题就是提供,克服现有技术中很难实现控制shell脚本并行执行的问题。为了解决上述技术问题,本专利技术提供,应用于linux和unix平台,包括如下步骤(1)当有shell脚本需要执行时,脚本模块处理器向管道写入请求;(2)令牌模块处理器在管道另一端顺序读取所述请求,当有令牌空闲时,将令牌按请求的先后顺序发给先请求的shell脚本进程,直到没有令牌可用;得到令牌的进程允许运行;没有得到令牌的进程则退出,不会执行。进一步地,所述步骤(1)执行之前,所述令牌模块处理器判断管道文件是否存在,若不存在则创建管道文件。进一步地,所述步骤(1)中,当有shell脚本需要执行时,所述脚本模块处理器先判断令牌模块处理器创建的管道文件是否存在,若存在则向管道写入请求,若不存在,则退出。进一步地,所述步骤(1)中,所述请求内容包括需要执行的shell脚本的进程号。进一步地,当所述得到令牌的进程执行完毕,脚本模块处理器向管道发送终止信号,交回令牌。进一步地,所述脚本模块处理器通过trap命令捕获进程退出信号,从而向管道发送终止信号,交回令牌。进一步地,所述令牌模块处理器定时检测是否有死锁出现,若存在死锁,则删除死锁进程,并设置空闲的令牌数加1。进一步地,所述令牌模块处理器通过一计数器累计循环次数来实现定时,当存在死锁时,计数器置位,重新开始累计循环次数。本专利技术引入的令牌概念,借鉴多进程编程中临界区的概念,如果各个进程进入设立的临界区,只可能一个一个地顺序进入,利用linux的管道,多个进程写到同一个管道,只可能一行一行地进入,相应的,另一端也是一行一行地读出,如此就可以实现并行执行的多个进程进入临界区时的“串行化”,利用单独的死锁检测脚本,来检测死锁,这样也就没有多个并发进程对同一个令牌进行操作,所以上面描述的死锁问题发生的基础也就根本不存在了,这样就可以解决死锁的问题。附图说明图1本专利技术实施例限制shell脚本并行执行的方法的流程图;图2是本专利技术应用实例的令牌模块处理器执行流程图;图3是本专利技术应用实例的脚本模块处理器执行流程图。具体实施例方式本专利技术的主要思想就是,采用类似以太网的令牌解决原先技术上的缺陷。下面结合附图及具体实施例对本专利技术进行详细说明。如图1所示,本专利技术实施例限制shell脚本并行执行的方法,包括如下步骤步骤101,当有shell脚本需要执行时,脚本模块处理器向管道写入请求,请求内容包括需要执行的shell脚本的进程号;步骤102,令牌模块处理器在管道另一端顺序读取所述请求,当有令牌空闲时,将令牌按请求的先后顺序发给先请求的shell脚本进程,直到没有令牌可用;得到令牌的进程允许运行;没有得到令牌的进程则退出,不会执行;步骤103,当一个进程执行完毕,向管道发送一个终止信号,即交回令牌; 步骤104,令牌模块处理器接受到令牌后,又开始选取下一个进程发放令牌。所述令牌可以是一个,也可以是多个。本专利技术将检测处理死锁的代码单独拿出来,交给令牌模块处理器的一个专门的进程来处理,检测和删除死锁的任务由一个专门的进程来执行时,就没有多个并发进程对同一个令牌进行操作。令牌处理器的上述进程还用于控制令牌的发放和回收。本专利技术中,还设置了一个计数器用于定时,从而定时检查是否存在死锁,该计数器可调整其定时时间。下面对本专利技术在网络视讯中的定期执行对数据库操作的脚本的并发数控制来对令牌模块处理器执行流程和脚本模块处理器执行流程进行说明。如图2所示,令牌模块处理器执行流程包括如下步骤步骤201,令牌模块处理器在后台运行,判断是否管道文件存在,若存在,则执行步骤203,若不存在,则执行步骤202;步骤202,创建管道文件;步骤203,设置基本的信息参数,如允许shell脚本并发的最大数(即可用令牌个数),死锁检测周期;其中死锁检测周期通过设置循环计数实现;步骤204,判断循环次数是否达到设定值,即是否到了死锁检查周期,若是,则执行步骤205;若否,则执行步骤207;步骤205,因为循环次数是由一个计数器来统计的,所以,当到达死锁检查周期时,计数器复位,用于清零,重新进行统计;判断是否存在死锁,若是,则执行步骤206,若否,则执行步骤207;步骤206,删除死锁,当前并发运行shell脚本数减少1,即空闲的令牌数加1;步骤207,增加循环次数,即循环次数加1;步骤208,检查当前并发运行的shell脚本数是否达到步骤203设置的脚本并发的最大数,若是,则执行步骤211,若否,则执行步骤209;步骤209,若当前并发运行的shell脚本数没有达到设置的最大数,也就是还有空闲的令牌可用,则判断从管道中读取的信息是申请令牌还是撤销令牌,若是申请令牌,则执行步骤210,否则执行步骤212; 步骤210,分发令牌,当前脚本并发数加1,返回执行步骤204;步骤211,若当前并发运行的shell脚本数达到设置的最大数,也就是没有空闲的令牌可用,则丢弃申请令牌的操作,返回执行步骤204;步骤212,若是撤销令牌,则收回令牌,重新进入接口5进行再次循环当前并发运行的shell脚本数减少1,返回执行步骤204。如图3所示,脚本模块处理器执行流程包括如下步骤步骤301,脚本模块处理器判断令牌模块处理器创建的管道文件是否存在,若存在,则执行步骤302,若不存在,则本文档来自技高网
...

【技术保护点】
一种限制shell脚本并行执行的方法,应用于linux和unix平台,包括如下步骤:    (1)当有shell脚本需要执行时,脚本模块处理器向管道写入请求;    (2)令牌模块处理器在管道另一端顺序读取所述请求,当有令牌空闲时,将令牌按请求的先后顺序发给先请求的shell脚本进程,直到没有令牌可用;得到令牌的进程允许运行;没有得到令牌的进程则退出,不会执行。

【技术特征摘要】

【专利技术属性】
技术研发人员:谢斌
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1