CN101082870B - 一种限制shell脚本并行执行的方法 - Google Patents
一种限制shell脚本并行执行的方法 Download PDFInfo
- Publication number
- CN101082870B CN101082870B CN2007101301400A CN200710130140A CN101082870B CN 101082870 B CN101082870 B CN 101082870B CN 2007101301400 A CN2007101301400 A CN 2007101301400A CN 200710130140 A CN200710130140 A CN 200710130140A CN 101082870 B CN101082870 B CN 101082870B
- Authority
- CN
- China
- Prior art keywords
- token
- script
- module processor
- deadlock
- shell script
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Multi Processors (AREA)
- Advance Control (AREA)
Abstract
本发明公开了一种限制shell脚本并行执行的方法,应用于linux和unix平台,包括:当有shell脚本需要执行时,脚本模块处理器向管道写入请求;令牌模块处理器在管道另一端顺序读取所述请求,当有令牌空闲时,将令牌按请求的先后顺序发给先请求的shell脚本进程,直到没有令牌可用;得到令牌的进程允许运行;没有得到令牌的进程则退出,不会执行。本发明引入的令牌概念,利用linux的管道,实现并行执行的多个进程进入临界区时的“串行化”,利用单独的死锁检测脚本,来检测死锁,没有多个并发进程对同一个令牌进行操作,可以有效地解决死锁的问题。
Description
技术领域
本发明涉及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脚本并行执行的方法,克服现有技术中很难实现控制shell脚本并行执行的问题。
为了解决上述技术问题,本发明提供一种限制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,若不存在,则结束本次流程;
步骤302,令牌模块处理器的管道文件存在,把需要运行的shell脚本的PID号(即进程ID号)写入管道文件,申请令牌;
步骤303,通过令牌模块处理器判断获是否获得令牌,若是,则执行步骤304,若否,则结束本次流程;
步骤304,向管道写入脚本开始进行执行行为;
步骤305,执行真正需要脚本处理事件,执行结束后,进入步骤306;
步骤306,退出执行脚本;
步骤307,通过trap命令捕获进程退出信号,向管道文件写入释放令牌信息,令牌管理处理器通过该信号释放该脚本占用的令牌,结束本次流程。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化,本发明的保护范围以权利要求为准。
Claims (7)
1.一种限制shell脚本并行执行的方法,应用于linux和unix平台,包括如下步骤:
(1)当有shell脚本需要执行时,脚本模块处理器向管道写入请求;
(2)令牌模块处理器在管道另一端顺序读取所述请求,当有令牌空闲时,将令牌按请求的先后顺序发给先请求的shell脚本进程,直到没有令牌可用;得到令牌的进程允许运行;没有得到令牌的进程则退出,不会执行。
2.根据权利要求1所述的方法,其特征在于,所述步骤(1)执行之前,所述令牌模块处理器判断管道文件是否存在,若不存在则创建管道文件。
3.根据权利要求1所述的方法,其特征在于,所述步骤(1)中,所述请求内容包括需要执行的shell脚本的进程号。
4.根据权利要求1所述的方法,其特征在于,当所述得到令牌的进程执行完毕,脚本模块处理器向管道发送终止信号,交回令牌。
5.根据权利要求4所述的方法,其特征在于,所述脚本模块处理器通过trap命令捕获进程退出信号,从而向管道发送终止信号,交回令牌。
6.根据权利要求1所述的方法,其特征在于,所述令牌模块处理器定时检测是否有死锁出现,若存在死锁,则删除死锁进程,并设置空闲的令牌数加1。
7.根据权利要求6所述的方法,其特征在于,所述令牌模块处理器通过一计数器累计循环次数来实现定时,当存在死锁时,计数器置位,重新开始累计循环次数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101301400A CN101082870B (zh) | 2007-07-20 | 2007-07-20 | 一种限制shell脚本并行执行的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101301400A CN101082870B (zh) | 2007-07-20 | 2007-07-20 | 一种限制shell脚本并行执行的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101082870A CN101082870A (zh) | 2007-12-05 |
CN101082870B true CN101082870B (zh) | 2012-01-11 |
Family
ID=38912454
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101301400A Expired - Fee Related CN101082870B (zh) | 2007-07-20 | 2007-07-20 | 一种限制shell脚本并行执行的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101082870B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2146528A1 (en) * | 2008-07-15 | 2010-01-20 | Gemplus | Method for accessing a service offered from a token, corresponding token and system |
CN102650956B (zh) * | 2011-02-23 | 2014-08-27 | 蓝盾信息安全技术股份有限公司 | 一种程序并发的方法及系统 |
CN104063375A (zh) * | 2013-03-18 | 2014-09-24 | 深圳市腾讯计算机系统有限公司 | 管道通讯的方法和装置 |
CN103617023B (zh) * | 2013-11-20 | 2016-02-17 | 北京先进数通信息技术股份公司 | 一种系统垃圾资源的回收方法和装置 |
CN103744675A (zh) * | 2014-01-06 | 2014-04-23 | 浪潮(北京)电子信息产业有限公司 | 一种基于Linux管道技术的脚本、命令执行引擎及方法 |
CN104731655B (zh) * | 2015-04-07 | 2018-03-20 | 南京途牛科技有限公司 | 脚本的可持续运行方法及系统 |
CN106776775B (zh) * | 2016-11-11 | 2021-05-07 | 北京奇虎科技有限公司 | 并发主从同步方法及装置 |
CN112131012B (zh) * | 2020-11-26 | 2021-07-20 | 九州华兴集成电路设计(北京)有限公司 | 令牌的处理方法、处理装置与计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5261097A (en) * | 1991-03-11 | 1993-11-09 | Digital Equipment Corporation | Computer system and method for executing command scripts using multiple synchronized threads |
CN1602626A (zh) * | 2001-12-20 | 2005-03-30 | 皇家飞利浦电子股份有限公司 | 用于电视机或机顶盒装置的无人看管控制和特性扩展的基于原本的方法 |
US7003765B1 (en) * | 2001-12-12 | 2006-02-21 | Oracle International Corporation | Computer-based pre-execution analysis and verification utility for shell scripts |
JP2007183691A (ja) * | 2005-12-29 | 2007-07-19 | Hewlett-Packard Development Co Lp | ワークフロースクリプト実行システムおよびその方法 |
-
2007
- 2007-07-20 CN CN2007101301400A patent/CN101082870B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5261097A (en) * | 1991-03-11 | 1993-11-09 | Digital Equipment Corporation | Computer system and method for executing command scripts using multiple synchronized threads |
US7003765B1 (en) * | 2001-12-12 | 2006-02-21 | Oracle International Corporation | Computer-based pre-execution analysis and verification utility for shell scripts |
CN1602626A (zh) * | 2001-12-20 | 2005-03-30 | 皇家飞利浦电子股份有限公司 | 用于电视机或机顶盒装置的无人看管控制和特性扩展的基于原本的方法 |
JP2007183691A (ja) * | 2005-12-29 | 2007-07-19 | Hewlett-Packard Development Co Lp | ワークフロースクリプト実行システムおよびその方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101082870A (zh) | 2007-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101082870B (zh) | 一种限制shell脚本并行执行的方法 | |
Chandy et al. | Distributed snapshots: Determining global states of distributed systems | |
CN100538643C (zh) | 用于调度由于事件相关性被部分排序的事务的方法和系统 | |
CN106293919B (zh) | 一种时间触发的嵌入式任务调度装置与方法 | |
Huang et al. | Priority inheritance in soft real-time databases | |
Ferscha et al. | Parallel and distributed simulation of discrete event systems | |
Buchmann et al. | Time-critical database scheduling: A framework for integrating real-time scheduling and concurrency control | |
Bertogna et al. | Limited preemption EDF scheduling of sporadic task systems | |
Burns et al. | Robust mixed-criticality systems | |
US8719801B2 (en) | Timing analysis of concurrent programs | |
CN103970603B (zh) | 一种基于多级反馈队列的事件注入引擎的任务调度方法 | |
CN101216792B (zh) | 实时操作系统的任务管理方法、装置 | |
Balsamo et al. | A unifying approach to product-forms in networks with finite capacity constraints | |
Perathoner et al. | Influence of different abstractions on the performance analysis of distributed hard real-time systems | |
Garg et al. | Scalable algorithms for global snapshots in distributed systems | |
Mubeen et al. | Extracting timing models from component-based multi-criticality vehicular embedded systems | |
Helt et al. | Regular sequential serializability and regular sequential consistency | |
Ng et al. | On-line detection and resolution of communication deadlocks | |
Mishra | An efficient voting and priority based mechanism for deadlock prevention in distributed systems | |
Rontogiannis et al. | Distributed algorithm for communication deadlock detection | |
Mayo et al. | Global predicates in rough real time | |
Kany et al. | Design optimisation of fault-tolerant eventtriggered embedded systems | |
Levine | Priority inversion with fungible resources | |
Tsay et al. | A real-time algorithm for fair interprocess synchronization | |
Anton et al. | Efficient scheduling in redundancy systems with general service times |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120111 Termination date: 20160720 |
|
CF01 | Termination of patent right due to non-payment of annual fee |