linux 脚本 进程监护,shell实现web服务进程监控并自动重启

一、目的需求

根据业务需要,目前负责维护的产品形式基本是属于分布式的,有多个web服务部署在不同项目现场,针对这些web服务的维护就成了比较麻烦的事情。为了保障系统服务,之前已经采用LNMP+zabbix的方案搭建了一套web服务监控系统,可以方便的查看各项目的web服务状态,方便及时发现问题并解决。

采用Grafana的前端监控界面(比zabbix自带的图表好看点 - -):

fed9bc2a1222170772f09db58679c77a.png

不过虽然有zabbix贴心的监控和提醒(实际上由于网络不稳定或等等玄学因素,冗余警告非常多,多了就烦了。。。),但是解决具体问题还是需要远程到项目现场进行,特别是一些进程运行时间久了之后的异常,或者数据库连接断开等,简单重启一下web服务即可解决。但是,多了频繁了之后就很浪费时间了,于是打算通过shell来监控各项目地的web服务并实现异常自动重启,作为程序猿,当然要用代码来偷懒啦~(懒惰是三大生产力之一)

二、分析过程

思路如下:

1.定时执行monitor监控脚本,获取服务状态;

2.monitor功能:

if:web服务异常

restart web服务

else:皆大欢喜

逻辑很简单清楚,貌似很容易,不过这里有一个问题,如何判定web服务异常?

根据实际经验,异常常见原因共如下几种:

1.web服务进程莫名挂掉;

2.web服务数据库连接失败,多次尝试后挂起;

3.项目地网络出现波动;(不用吐槽,教育网还有偏远地区是这样的,指不定哪天光纤被挖断或者交换机故障(╯▽╰))

对应解决方案:

1.判断进程是否存在,不存在则重启web服务;

2.这个直接通过shell不好判断,借鉴了之前在zabbix做http监控时的方法,通过模拟登录的方式,登录一个测试页面,获取http_code,若200则正常,非200则属于异常。

3.这个可以通过判断本地服务,如果本地访问无问题则正常。

三、代码实现

monitor逻辑分析清楚了,可以开始进行了,其中模拟登录使用curl来获取http_code。

#! /bin/sh

host_dir="/opt/ybg/" # 当前用户根目录

proc_name="java" # 进程名

file_name="monitor.log" # 日志文件

pid=0

proc_num() # 计算进程数

{

num=`ps -ef | grep $proc_name | grep -v grep | wc -l`

return $num

}

proc_id() # 进程号

{

pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`

}

# 通过curl模拟登录获取http_code,模拟登录参数仅供参考

# 如果只需要判断某页面的状态可使用curl -I -s -w "%{http_code}" -o /dev/null http://www.baidu.com/ 直接获取即可

http_code=`curl -I -s -w "%{http_code}" -o -d "userKey=admin&pass=c9127e832b41a" /dev/null http://portal.ly-sky.com/login.do?login= | head -n 1 | cut -d$' ' -f2`

proc_num

number=$?

if [[ $number -eq 0 ]]||[[ $http_code -ne 200 ]] # 判断进程是否存在

then

cd /opt/ybg/URP/bin/

nohup ./run.sh>../logs/urp.log 2>&1 & # 重启进程的命令,请相应修改

sleep 3 #延迟3秒是为了确保进程已正常启动并方便获取pid,否则有可能获取不到pid

proc_id # 获取新进程号

echo $pid, `date` >> $host_dir$file_name # 将新进程号和重启时间记录

fi

执行成功的日志记录:

记录了PID和启动时间,前面几条就是因为未加入sleep获取Pid失败,显示为空了

4fa24fa1e0eb9d4fef8ab0f32272d148.png

部署到服务器后只需要在crontab添加任务,定时执行就行了:

[root@localhost ybg]# crontab -e

#添加web服务监控,每5分钟一次,可根据实际要求修改监控频率

*/5 * * * * /opt/ybg/monitor.sh

添加完毕后,可以手动kill -9 pid来测试监控是否正常运行。提示:测试时注意生产环境哦,如果服务宕了被老板请去喝茶就不好啦~✧(≖ ◡ ≖✿)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值