美文网首页
监控服务运行状态并发送通知邮件文档

监控服务运行状态并发送通知邮件文档

作者: 鸡龙 | 来源:发表于2020-11-18 16:33 被阅读0次

    使用的是QQ邮箱,需要先在邮箱中开通smtp服务

    QQ邮箱开通stmp

    目录结构

    根目录 /var/haofangproject/email

    ├── alive.sh 监控脚本
    ├── emailStatus.txt 服务运行状态
    ├── isRun.txt 服务故障转变正常运行发送内容
    ├── noRun.txt 服务正常运行转变故障发送内容
    ├── mail.log 监控脚本输出日志

    安装邮箱依赖

    yum install sendmail
    yum install mailx –y
    yum update libreport-plugin-mailx
    yum -y install sharutils
    yum install mutt
    

    编辑mail.rc

    vim /etc/mail.rc
    set from=xx@qq.com    #发件邮箱,这里我使用了qq邮箱
    set smtp=smtps://smtp.qq.com:465   #smtp服务器和端口地址
    set smtp-auth-user=xx@qq.com    #发件邮箱,这里我使用了qq邮箱
    set smtp-auth-password=xxx    #qq,163填写授权码,其他邮箱服务可以查一下是怎样解决的,应该是类似的。否则发送邮件时会报错误,qq会报这个错误smtp-server: 535
    set smtp-auth=login    #默认login即可,默认,不用修改
    set ssl-verify=ignore    #ssl认证方式,默认,不用修改
    set nss-config-dir=/root/.certs    #证书所在目录,这个可以改成其他的,但是不能空着,一会会根据这个目录生成证书
    

    申请邮箱cert

    mkdir -p /root/.certs/
    echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
    certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
    certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
    certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs/./ -i qq.crt
    certutil -L -d /root/.certs
    

    邮箱发送测试

    mail -s "title" xx@qq.com < /usr/mail.txt

    编写监控shell脚本

    其中emailStatus.txt是防止重复状态邮件的发送,用作是否发送邮箱的标志。noRun.txt isRun.txt是运行状态对应的邮件内容。

    编写脚本alive.sh

    #!/bin/bash
    doc=`docker ps |grep 'haofang-service-app'`;
    statu=`cat '/var/haofangproject/email/emailStatus.txt'`;
    date=$(date "+%Y-%m-%d %H:%M:%S");
    if [ -z "$doc" ]; then
        echo ${date} 'no run';
        if [ $statu = "1" ]; then
             mail -s "title" 1061917196@qq.com < /var/haofangproject/email/noRun.txt
             echo "0" > /var/haofangproject/email/emailStatus.txt
             echo "${date} 已发送故障邮件"
        fi
    else
        echo ${date} 'is run';
        if [ $statu = "0" ]; then
             mail -s "title" 1061917196@qq.com < /var/haofangproject/email/isRun.txt
             echo "1" > /var/haofangproject/email/emailStatus.txt
             echo "${date} 已发送恢复邮件"
        fi
    fi
    
    

    配置定时任务

    crontab -e
    * * * * * sleep 30; sh /var/haofangproject/email/alive.sh
    crontab -l
    systemctl restart crond.service
    

    crontab任务配置基本格式:
    * * * * * command

    • 第1列表示分钟0~59 每分钟用*或者 */1表示
    • 第2列表示小时0~23(0表示0点)
    • 第3列表示日期1~31
    • 第4列表示月份1~12
    • 第5列标识号星期0~6(0,7都可表示星期天)
    • 第6列要运行的命令

    综合起来就是: 分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)  命令

    从上面可以看出,crontab最小的时间单位: 1分钟。如果要每30秒执行一次脚本,要么写个小脚本,要么在crontab增加延迟。

    相关文章

      网友评论

          本文标题:监控服务运行状态并发送通知邮件文档

          本文链接:https://www.haomeiwen.com/subject/kcbciktx.html