自动化又fail了,这个锅我不背

首图

测试环境说:自动化用例又fail了,这个锅我不背——linux进程监控及自动重启

背景

机房要迁移了!机房要断电了!机房服务器要重启了!

每次机房要搞事情,总是有一堆烦恼的事情。服务器重启了,各应用都需要重新启动,未及时重启,总是会有各种各样的不愉快。

哎呀,某某应用还未启动,以为某某同事去启动了,某某比较隐蔽的服务,又忘记启动了……各种启动任务需要手动执行,但总是还有部分应用被遗忘。

最终导致,每日自动化回归用例又挂掉啦T_T,服务器已经启动了,怎么还挂掉啊T_T。

开始分析redis,数据库,上游服务……历经千辛万苦,终于把服务都重启完毕,心好累……

思考

如何保证各应用稳定运行?机房搞完事情,环境不稳定现象,重则持续一周。

人为手动重启,总是存在遗漏的情况,而且这重复枯燥的任务,实在不想每次都手动执行一遍。

是否存在一种自动化方式,能够自动监控应用运行情况,若应用未运行,则自动启动?

而且,需要服务器重启后,能够自动检测到,并在短时间内进行重启应用操作,降低对整个测试环境的影响。

解决方案

概述

通过linux的crontab定时任务,设置开机自启动,来监听指定进程是否启动,若进程未启动,则根据指定的启动脚本启动进程。

Shell脚本

新建/apps/sh/monitorprocess.sh脚本,脚本内容如下,需根据实际情况稍微修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
#要监听的进程唯一关键字,多个进程以空格分隔
process=(iproxy exposure igw)
#启动以上进程的脚本,需要与以上进程一一对应
startShell=("/apps/sh/iproxy.sh start" "/apps/sh/exposure.sh start" "/apps/svr/tomcat/bin/startup.sh")
#循环检查以上指定的进程,若进程不存在,则重启
for((i=0;i<${#process[@]};i++))
do
ps -fe|grep ${process[i]} |grep -v grep
if [ $? -ne 0 ]
then
echo "start process....."${process[i]}
${startShell[i]}
else
echo "runing....."
fi
done

提醒:记得给脚本添加执行权限哦~

crontab定时任务

执行命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#进入crontab编辑模式
crontab -e
#按i进行编辑,设置定时任务,每隔10分钟执行一次
*/10 * * * * cd /apps/sh;./monitorprocess.sh>>./process.log 2>&1
#按Ctrl+C,Shift+:,输入wq!,保存修改

#启动定时任务
service crond start 或 service crond restart

#检查是否开机自启动crond
chkconfig --list crond

#若未设置开机自启动,则设置之
chkconfig crond on

结果

我们再也不怕机房迁移,机器重启,服务进程不稳定被kill等影响环境稳定;我们再也不用因为自动化用例又fail了,再次把锅甩给不稳定的测试环境了!