1.本发明属于it系统运维领域,涉及代理agent管理执行脚本程序的方法,特别是一种基于异构操作系统的脚本服务化方法。
背景技术:2.在it系统运维过程中,每台被监控管理的计算机上都会安装agent软件,用于和服务器或者proxy通讯交互,执行服务器发布的命令,对目标计算机进行监控管理。当服务器对agent发布一个脚本执行命令时,目前的agent实现方式是由agent启动一个shell进程,由shell执行脚本命令。执行完脚本命令后,shell进程向agent返回结果,然后退出。
3.目前的实现方案有以下问题:1)由于启动进程是一个耗费资源和时间的操作,agent每次执行脚本程序时,都需要先启动一个shell进程,然后由shell执行脚本命令,命令执行结束后再关闭shell进程,使得脚本程序的执行效率比较低,需要花费更多的时间。2)当一小段时间里有大量的脚本程序需要agent执行时,agent同时启动多个shell进程执行脚本任务。当启动的shell进程过多时,会大量消耗被监控管理主机的cpu和内存资源,可能造成主机cpu和内存占用超出监控管理的设计限制,进而影响主机正常任务的执行。
技术实现要素:4.本发明针对现有技术的缺陷或不足,提供一种基于异构操作系统的脚本服务化方法。
5.本发明的技术解决方案如下:
6.一种基于异构操作系统的脚本服务化方法,其特征在于,在安装有agent软件的被监控管理主机中设置空闲shell进程池,所述空闲shell进程池中包含已预先随所述agent软件启动而启动的若干个shell进程,每个已预先启动的shell进程作为空闲shell进程在所述空闲shell进程池中等待agent将其取出以执行脚本命令。
7.所述被监控管理主机通过agent连接服务器,agent内设置有脚本命令任务队列模块,从服务器传递来的脚本命令和agent本地发起的脚本命令均首先进入脚本命令任务队列排队,agent从队列头部取出脚本命令任务,从空闲shell进程池取出shell进程,把脚本命令任务提交给shell进程执行。
8.所述把脚本命令任务提交给shell进程执行包括agent将脚本命令从shell进程标准输入接口传递给shell进程,先输入显示开始命令,再输入脚本命令,最后输入显示结束命令。
9.对于不同的操作系统都有对应的shell程序,使得脚本服务化方法具有普适性,以支持各种类型的操作系统。
10.所述被监控管理主机的操作系统为windows或linux或aix或hp-ux。
11.初始启动shell进程的数量由参数配置确定,服务器通过向agent发布命令,修改参数的值。
12.服务器通过向agent发布命令,联机修改shell进程的数量,由agent新启动或者停止一定数量的shell进程,使得提供执行脚本命令服务的shell进程的数量和服务器命令指定的数量相同,agent在停止shell进程时,只有进入空闲shell进程池的进程才会被停止,用于保证不中断正在执行的任务。
13.包括以下步骤:
14.步骤1,服务器把脚本程序文件下传给agent;
15.步骤2,agent把所述脚本程序文件保存到本地;
16.步骤3,服务器把脚本命令及参数传递给agent后由agent把接收到的脚本命令放入任务队列,agent将定时执行等本地发起的脚本命令放入任务队列;
17.步骤4,agent设置专门的线程池等待任务队列中任务到来,一旦任务到来,取出任务,从空闲shell进程池中取出一个空闲shell进程,如没有空闲shell进程就等待;
18.步骤5,agent将脚本命令从shell进程标准输入接口传递给shell进程,先输入显示开始命令,再输入脚本命令,最后输入显示结束命令;
19.步骤6,agent从shell进程标准输出接口读取输出信息,确认任务执行状态,当读到显示结束命令的信息时,说明脚本命令已经执行完毕,将shell进程返回空闲shell进程池,将执行结果登记日志并返回脚本命令发起方。
20.本发明的技术效果如下:本发明一种基于异构操作系统的脚本服务化方法,通过设置空闲shell进程池,和将随agent软件启动而启动的若干个shell进程作为空闲shell进程放入空闲shell进程池中以等待执行脚本命令,能够提升在it系统运维过程中agent执行shell脚本命令的效率,控制agent执行shell脚本命令时所占用的系统资源。
21.本发明的有益效果如下:1、由于预先启动了shell进程,不用每执行一个shell程序都启动、关闭一次shell进程,会提升脚本程序的执行效率,经测试,在一定的测试环境和测试案例下,执行效率有10倍的提升。2、由于脚本命令先排队,然后分配给固定数量的shell进程执行,同时执行脚本任务的shell进程数量不会因大量任务同时到来而膨胀,起到限流作用,使得系统资源占用能保持在合理区间范围内。3、由于不同的操作系统都有对应的shell程序,使得脚本服务化方法具有普适性,能够支持各种类型的操作系统。
附图说明
22.图1是实施本发明一种基于异构操作系统的脚本服务化方法所形成的包括服务器和被监控管理主机之间的架构示意图。图1中的被监控管理主机中安装有agent软件,和随所述agent软件启动而启动的若干个shell进程以等待执行脚本命令,所述被监控管理主机通过agent连接服务器/proxy,agent中设置有脚本命令任务队列模块,所述若干个shell进程均作为空闲shell进程进入空闲shell进程池中,agent通过从所述空闲shell进程池取出空闲shell进程执行从所述脚本命令任务队列模块取出的脚本命令任务。
23.图2是实施本发明一种基于异构操作系统的脚本服务化方法的流程图。图2中包括步骤1,服务器把脚本程序文件下传给agent;步骤2,agent把接收到的文件保存到本地;步骤3,服务器把脚本命令及参数传递给agent后由agent把接收到的脚本命令放入任务队列,agent将定时执行等本地发起的脚本命令放入任务队列;步骤4,agent设置专门的线程池等待任务队列中任务到来,一旦任务到来,取出任务,从空闲shell进程池中取出一个空闲
shell进程,如没有空闲shell进程就等待;步骤5,agent将脚本命令从shell进程标准输入接口传递给shell进程,先输入显示开始命令,再输入脚本命令,最后输入显示结束命令;步骤6,agent从shell进程标准输出接口读取输出信息,确认任务执行状态,当读到显示结束命令的信息时,说明脚本命令已经执行完毕,将shell进程返回空闲shell进程池,将执行结果登记日志并返回脚本命令发起方。
具体实施方式
24.下面结合附图(图1-图2)和实施例对本发明进行说明。
25.图1是实施本发明一种基于异构操作系统的脚本服务化方法所形成的包括服务器和被监控管理主机之间的架构示意图。图2是实施本发明一种基于异构操作系统的脚本服务化方法的流程图。参考图1至图2所示,一种基于异构操作系统的脚本服务化方法,在安装有agent软件的被监控管理主机中设置空闲shell进程池,所述空闲shell进程池中包含已预先随所述agent软件启动而启动的若干个shell进程,每个已预先启动的shell进程作为空闲shell进程在所述空闲shell进程池中等待agent将其取出以执行脚本命令。所述被监控管理主机通过agent连接服务器,agent内设置有脚本命令任务队列模块,从服务器传递来的脚本命令和agent本地发起的脚本命令均首先进入脚本命令任务队列排队,agent从队列头部取出脚本命令任务,从空闲shell进程池取出shell进程,把脚本命令任务提交给shell进程执行。
26.所述把脚本命令任务提交给shell进程执行包括agent将脚本命令从shell进程标准输入接口传递给shell进程,先输入显示开始命令,再输入脚本命令,最后输入显示结束命令。对于不同的操作系统都有对应的shell程序,使得脚本服务化方法具有普适性,以支持各种类型的操作系统。所述被监控管理主机的操作系统为windows或linux或aix或hp-ux。初始启动shell进程的数量由参数配置确定,服务器通过向agent发布命令,修改参数的值。服务器通过向agent发布命令,联机修改shell进程的数量,由agent新启动或者停止一定数量的shell进程,使得提供执行脚本命令服务的shell进程的数量和服务器命令指定的数量相同,agent在停止shell进程时,只有进入空闲shell进程池的进程才会被停止,用于保证不中断正在执行的任务。
27.包括以下步骤:步骤1,服务器把脚本程序文件下传给agent;步骤2,agent把所述脚本程序文件保存到本地;步骤3,服务器把脚本命令及参数传递给agent后由agent把接收到的脚本命令放入任务队列,agent将定时执行等本地发起的脚本命令放入任务队列;步骤4,agent设置专门的线程池等待任务队列中任务到来,一旦任务到来,取出任务,从空闲shell进程池中取出一个空闲shell进程,如没有空闲shell进程就等待;步骤5,agent将脚本命令从shell进程标准输入接口传递给shell进程,先输入显示开始命令,再输入脚本命令,最后输入显示结束命令;步骤6,agent从shell进程标准输出接口读取输出信息,确认任务执行状态,当读到显示结束命令的信息时,说明脚本命令已经执行完毕,将shell进程返回空闲shell进程池,将执行结果登记日志并返回脚本命令发起方。
28.本发明提供一种基于异构操作系统的脚本服务化方法,用于提升在it系统运维过程中agent执行shell脚本命令的效率,控制agent执行shell脚本命令时所占用的系统资源,包括下列技术手段:
29.当agent启动时,启动一定数量的shell进程,等待执行脚本命令。当一个脚本命令到来时,找到一个空闲的shell进程,将脚本命令传递给shell进程执行并接收shell进程执行脚本命令的输出信息。当一个脚本命令执行完成后,shell进程进入空闲状态,等待下一个脚本命令的到来。
30.设置空闲shell进程池,管理空闲shell进程。shell进程启动以后就进入空闲shell进程池,当需要执行脚本命令时,agent从空闲shell进程池中取出一个空闲的shell进程执行脚本命令,执行完脚本命令后,shell进程进入空闲shell进程池等待下一次脚本任务。
31.agent执行脚本命令时,在执行脚本命令前,执行完脚本命令后会分别增加一个用于显示脚本执行开始、结束的脚本命令。agent检查shell进程的标准输出,从而获取一个脚本命令已经开始执行和已经执行完毕的信息。
32.当脚本命令是执行一个脚本程序文件时,服务器和agent会有两次交互,第一次交互,服务器把脚本程序文件下传给agent,由agent保存在本地。第二次交互,服务器把调用脚本程序文件的脚本命令及参数下传给agent,由agent立刻组织执行。
33.初始启动shell进程的数量由参数配置确定,服务器可以通过向agent发布命令,修改参数的值。服务器还可以通过向agent发布命令,联机修改shell进程的数量,由agent新启动或者停止一定数量的shell进程,使得提供执行脚本命令服务的shell进程的数量和服务器命令指定的数量相同。agent在停止shell进程时,只有进入空闲shell进程池的进程才会被停止,用于保证不中断正在执行的任务。
34.设置脚本命令任务队列。从服务器传递来的脚本执行命令和agent本地发起的脚本执行命令首先进入脚本命令任务队列排队。agent从队列头部取出脚本命令任务,从空闲shell进程池取出shell进程,把脚本命令任务提交给shell进程执行。如果没有脚本命令任务或者没有空闲shell进程则等待。
35.针对不同的操作系统,启动对应的shell程序,比如,对于windows,启动cmd程序,对于linux,启动sh程序,对于aix,hp-ux等操作系统,启动对应的shell程序。有些操作系统具有多种shell程序,为了减轻运维工作量,建议对同一种操作系统启动同一种shell程序。
36.如图1所示,每台被监控管理的计算机上都会安装agent软件,用于和服务器或者proxy通讯交互,执行服务器发布的命令,对目标计算机进行监控管理。当agent启动时,同时会启动一定数量的shell进程,这些进程会进入空闲shell进程池,等待执行脚本命令任务。初始启动shell进程的数量由参数配置确定,服务器可以通过向agent发布命令,修改参数的值。服务器还可以通过向agent发布命令,联机修改shell进程的数量,由agent新启动或者停止一定数量的shell进程,使得提供执行脚本命令服务的shell进程的数量和服务器命令指定的数量相同。agent在停止shell进程时,只有进入空闲shell进程池的进程才会被停止,用于保证不中断正在执行的任务。针对不同的操作系统,启动对应的shell程序,比如,对于windows,启动cmd程序,对于linux,启动sh程序,对于aix,hp-ux等操作系统,启动对应的shell程序。有些操作系统具有多种shell程序,为了减轻运维工作量,建议对同一种操作系统启动同一种shell程序。
37.设置脚本命令任务队列。从服务器传递来的脚本执行命令和agent本地发起的脚本执行命令首先进入脚本命令任务队列排队。agent从队列头部取出脚本命令任务,从空闲
shell进程池取出shell进程,把脚本命令任务提交给shell进程执行。如果没有脚本命令任务或者没有空闲shell进程则等待。
38.脚本命令执行流程如图2所示。脚本命令既可以是执行一个脚本程序文件,也可以是其他shell命令。当脚本命令是执行一个脚本程序文件,这个脚本程序文件需要服务器传递给agent。
39.图2描述了脚本命令是执行一个脚本程序文件时的情况。
40.服务器把脚本文件下传给agent。
41.agent接收到文件以后保存到本地。
42.脚本命令任务队列保存了两类来源的任务:从服务器传递来的脚本执行命令和agent本地发起的脚本执行命令。
43.从服务器传递来的脚本执行命令由服务器把脚本命令及参数传递给agent,由agent放入任务队列。
44.agent本地发起的脚本执行命令由agent把定时执行的脚本命令任务等放入任务队列。
45.agent设置线程池,池中线程数量原则上等同于shell进程数量。由线程读取任务队列中的脚本命令执行任务。
46.线程读取任务队列中的任务后从空闲shell进程池中获取一个空闲shell进程,如果没有空闲shell进程就等待,直到取到空闲shell进程。
47.shell进程的标准io操作有标准输入(stdin),标准输出(stdout),标准错误(stderr),在java语言中通过三个流对应,getoutputstream(),getinputstream(),geterrorstream()。
48.对于任务队列中的每一个任务,agent在其前后分别增加显示开始命令和显示结束命令。将这些脚本命令通过shell进程的标准输入接口传递给shell进程。
49.agent从shell进程的标准输出接口读取输出信息,确认任务执行状态,当读到显示结束命令的信息时,说明脚本命令已经执行完毕,将shell进程返回空闲shell进程池,将执行结果登记日志并返回交易发起方。
50.本发明说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。在此指明,以上叙述有助于本领域技术人员理解本发明创造,但并非限制本发明创造的保护范围。任何没有脱离本发明创造实质内容的对以上叙述的等同替换、修饰改进和/或删繁从简而进行的实施,均落入本发明创造的保护范围。