公司生产服务器通过配置文件来控制进程连接数量,当没有进程或进程连接数与配置文件中配置不一致,则导致应用出现故障,影响业务正常运行。现采用脚本方式来对进程进行检测。
配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #max arguments = 10 ; #Subsystem Command max min para_area
FLD foldSvr 1 1 *Folder server # MON dcxmonisv 1 1 *Monitor server
HST dcxhstsv 1 1 *TCP permanence server # SHT possvr 1 1 *TCP brevity server # TIM timersvr 1 1 *Timer server # SEC secuSrv 1 1 *Security server SEC2 secuSrv3 1 1 *Security server3
APP TransRcv 2 2 *App server WTH HTServer 10 10 *EHT server POSP MoniPosp 2 2 *MONIPOSP server SMSP SMSRcv 1 1 *SMSRcv server # CHG ComChg 1 1 *Com server # MOD TransMod 1 1 *Mod server # DCS DCSP2Svr 1 1 *DCSP2 server # JNI JNISocketServer 1 1 *JNISocketServer # SZT SZTransServer 1 1 *SZTransServer # NJT NJTransServer 1 1 *NJTransServer # SZS SZTransServer 1 1 *SZTransServer |
分析:
上图为服务器配置文件,#为注释选项,排除注释的,则是我们需要的信息。
例如:
1 | WTH HTServer 10 10 *EHT server |
HTServer 为进程名
第一个 10 为连接数
那么我们需要监控的对象就有了分别为
foldSvr/1
dcxhstsv/1
secuSrv3/1
TransRcv/2
HTServer/10
MoniPosp/2
SMSRcv/1
脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/ksh servername=" foldSvr/ 1 dcxhstsv/ 1 secuSrv3/ 1 TransRcv/ 2 HTServer/ 10 MoniPosp/ 2 SMSRcv/ 1 " for i in $servername; do
pid=`echo $i | cut -d/ -f1`
num=`echo $i | cut -d/ -f2`
current_num=`ps -ef| grep $pid | grep -v grep | wc -l`
if [ $num -eq $current_num ]
then
echo "ok"
else
echo "加入重启命令"
exit
fi done |