(广西广播电视无线传播枢纽台)
在实际工作中,运行在服务器上的各类软件服务程序,偶尔出现异常后退出或者不能正常工作,这样该软件服务程序就无法提供准确的数据和执行各项指令,给使用者造成了困扰。为了解决这个问题,本文提出了一种基于C#的进程守护程序解决方案,在服务器上运行一个守护程序,实时监视软件服务程序的进程或心跳包,当软件服务程序出现异常退出或者进入假死状态不能正常工作时,进程守护程序的监视端可自动对出现故障的软件服务程序进行复位重启,亦可人工在进程守护程序的客户端界面上对出现故障的软件服务程序进行复位重启,使软件服务程序恢复正常运行。
1.目标
使用者能方便地查看所监视的各软件服务程序的当前运行状态,并可以手动复位重启程序。
2.涉众
主要涉众是各软件服务程序的使用者。
本进程守护程序分为三个部分:
1.守护系统服务端(下称服务端):负责将接收到的客户端复位指令转发给监视端,又将监视端复位软件服务程序的结果、监视端的通信状态和软件服务程序的运行状态转发给客户端。
2.守护系统监视端(下称监视端):该端部署在各软件服务程序所在的服务器上,接收到复位指令后,按照指令复位指定软件服务程序并将复位结果发送给服务端;定时将软件服务程序的运行状态发送给服务端。软件服务程序运行在不同的服务器上,所以监视端也将部署在多个服务器上。
3.守护系统客户端(下称客户端):负责将复位指令发送给服务端,并显示复位的结果;显示软件服务程序的运行状态。客户端部署在值班平台的多个值班电脑上。
图1 系统业务概念分析图
1.概述
进程守护程序主要有4个业务流程:
(1)复位软件服务程序;
(2)显示软件服务程序的运行状态(正常,异常,未运行);
(3)显示监视端的通信状态;
(4)显示服务端的通信状态。
2.复位软件服务程序的业务流程
使用者在客户端上点击复位一个或多个软件服务程序,客户端接收到复位事件后,立即发送复位指令给服务端。服务端收到指令后,检测接受指令的一个或多个监视端是否在线,如不在线,则将“监视端不在线,复位失败”的结果返回客户端,如果在线,则发送复位指令给监视端。监视端收到复位指令后,立即复位指定的软件服务程序,然后将复位结果返回给服务端。服务端也立即将复位结果返回给客户端。客户端接收复位结果的指令后,显示在界面上。
3.显示软件服务程序的运行状态的业务流程
监视端定时收集软件服务程序的运行状态(正常,异常,未运行)上报给服务端。服务端收到状态数据后,存入软件服务程序运行状态列表中。客户端启动成功后定时从服务端获取软件服务程序运行状态列表数据,然后在界面上显示。
4.显示监视端的通信状态
监视端定时发送心跳包给服务端,服务端收到心跳包后存入监视端通信状态列表,客户端启动成功后定时从服务端获取监视端通信状态列表数据,然后在界面上显示。
5.显示服务端的通信状态
客户端启动成功后定时发送心跳包给服务端,并将通信状态显示在界面上。
图2 系统总用例图
进程守护程序分为三个部分:
1.服务端:是一个中间件,负责转发客户端和监视端的数据信息,采用C#语言编写,运行于.Net Core3.1框架下,支持跨平台运行,服务端使用UDP协议与客户端、监视端进行通信。
2.监视端:负责守护一个或多个软件服务程序,部署在软件服务程序所在的服务器上,采用C#语言编写,运行于.Net Core3.1框架下,支持跨平台运行。
3.客户端:是部署在值班平台操作电脑上,C#语言编写,因为值班操作电脑使用Windows系统,故使用.Net FrameWork 4.7.2框架,提供WinForm友好可视界面,方便使用者直观地查看各软件服务程序的运行状态和进行复位操作。
图3 系统架构图
服务端基于.Net Core框架来创建,主要实现转发功能和状态存储功能。服务端启动后,创建一个Lsit
Socket对象实例化后,绑定一个侦听端口,实时接收客户端和监视端发送过来的UDP包,并对接收到的数据包进行解析,如果是客户端发来的复位的指令,就将复位指令转发给相应的监视端;如果是监视端返回的复位结果,则将结果转发给客户端;如果是监视端发来其自身和所监视的软件服务程序的状态数据,就将该状态数据推入消息队列。
BackgroundWorker线程对象实例化后,定时检查消息队列是否存在新消息,如果有新状态数据,则进行解析处理,并将结果存入Lsit
客户端基于.Net FrameWork框架来实现,主要是实现各监视端和软件服务程序状态的实时显示和进行复位操作指令的下发以及复位结果的显示。
客户端初始化时,创建一个Socket对象,并向服务端发送获取监视端和软件服务程序状态的请求,收到返回结果后,根据数据列表,动态创建Label对象和Button对象,将监视端和软件服务程序状态显示在UI界面上。此后就定时接收服务端推送过来的实时状态列表数据,并更新显示在UI界面上。
当使用者选择某个软件服务程序进行复位时,客户端监听到给复位事件,就通过Socket对象发送复位指令给服务端;当收到服务端转发来的复位结果后,就将复位结果通过Label对象显示出来。
监视端基于.Net Core框架来创建,主要实现自动或根据指令复位软件服务程序,和定时监测软件服务程序的进程和心跳包并上报的功能。
监视端初始化时,创建一个Socket对象,一个List
BackgroundWorker线程对象定时监测软件服务程序的进程是否还存在,心跳包时间是否已经超时,如果进程不存在或者心跳包已超时,则发送启动命令启动软件服务程序。同时定时将软件服务程序状态上报给服务端。
本进程守护程序使用了.Net Core和.Net Framework两个框架,C#语言编写,采用UDP协议进行通信。启用本程序后,在一定程度上能改善软件服务程序出现异常后的恢复速度,让使用者能对各软件服务程序的实时运行状态了如指掌。