1、制作监听脚本
监听脚本 monitor-email.sh
如下:
#!/bin/bash
#监听特定服务,当服务挂掉之后发送邮件至监听邮箱内
#接收参数
# $1:服务名称
# $2:接收信息的邮箱,不填写时默认为 ****@qq.com
### 1 监听特定进程
#######1.1 进程存在
#######1.2 进程不存在
########### 1.2.1 检查并更新mail服务
########### 1.2.2 检查并更新mail配置信息
########### 1.2.3 发送告警邮件
#定时任务,每5分钟执行一次脚本
#crontab -e
#*/5 * * * * /root/shell/monitor-email.sh >> /root/shell/sh.txt
process_name=${
1:-demo-service}
receiving_mail=${
2:-demo@qq.com}
receiving_content="线上服务宕机报警"
#监听并发送邮件信息
function monitor() {
process_running=`ps -ef | grep ${
process_name}| grep java|awk '{print $2}'`
if [[ ${
process_running} -le 0 ]]; then
echo "$(date +%Y-%m-%d\ %H:%M:%S) process ${process_name} is not exist"
send_mail
else
echo "$(date +%Y-%m-%d\ %H:%M:%S) process ${process_name} alive"
fi
}
#发送邮件
function send_mail() {
update_mailx
set_mail_param
echo "${receiving_content}" | mail -s "${process_name} 服务已宕机" ${
receiving_mail}
echo "$(date +%Y-%m-%d\ %H:%M:%S) mail has been sent"
}
# 检查并更新mail服务
function update_mailx() {
mail=`whereis mailx | grep gz`
echo "${mail}"
if [ -z "${mail}" ]; then
yum install mailx
else
echo "mail is installed"
fi
}
#检查并更新mail配置信息
function set_mail_param() {
param_set=`cat /etc/mail.rc | grep "[email protected]"`
if [ -z "${param_set}" ]; then
echo 'set [email protected]' >>/etc/mail.rc
echo 'set smtp=smtp.qq.com' >>/etc/mail.rc
echo 'set [email protected]' >>/etc/mail.rc
echo 'set smtp-auth-password=abcdefg' >>/etc/mail.rc #这里用的是授权码
echo 'set smtp-auth=login' >>/etc/mail.rc
else
echo "mail profile already set!"
fi
}
monitor
如果脚本文件是从 windows
上传至 linux
,可安装 dos2unix
进行转换;别忘了给脚本赋执行权限。
2、设置定时任务
crontab -e
*/5 * * * * /root/shell/monitor-email.sh >> /root/shell/sh.txt