监听特定服务并发送告警邮件

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

猜你喜欢

转载自blog.csdn.net/ChinaLiaoTian/article/details/126228560