背景
假设有一个服务需要长期运行,但可能会由于某种原因导致服务意外停止,不能及时发现,某天来到公司后发现出问题了才意识到服务挂了。此时再去手动重启服务可能已经造成很大损失了,那有没有办法可以自动监控服务运行状态,发现服务停止了自动拉起呢?如果你对Linux的定时任务crontab有所了解的话,很容易实现。如果还不了解crontab,请先阅读Linux定时任务之crontab一文。
应用举例
1、使用crontab+脚本监控服务
注意,crontab最小只支持分钟级的监控,如果需要秒级的监控频率,请参考方法2。
编写监控脚本:
#!/usr/bin/bash
log="/home/scripts/check.log"
pid=0
process_num=0
cpu_usage=0
mem_usage=0
# 要监控的服务名称
service_name="java"
# 日志文件不存在,就先创建
if [[ ! -e ${log} ]]; then
touch ${log}
fi
function info()
{
echo "[`date +'%F %T'` - INFO] - $1" >> ${log}
}
function warn()
{
echo "[`date +'%F %T'` - WARN] - $1" >> ${log}
}
function error()
{
echo "[`date +'%F %T'` - ERROR] - $1" >> ${log}
}
export -f info
export -f warn
export -f error
# 获取进程id
function proc_pid()
{