zoukankan      html  css  js  c++  java
  • Linux基础之-利用shell脚本实现自动监控系统服务

    目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户

    条件:  1. 主机及子机IP地址,hostname已确定;

         2. 主机与子机能够免密通讯,即基于密匙通讯(相关命令:ssh-keygen;ssh-copy-id -i web1);

    需要的文件:

           1. python邮件发送工具;

         2. nfc.sh监控脚本,监控nginx及nfs服务状态,并调用mail发送工具通知用户;    

         3. nfc-install.sh监控部署脚本,运行在主机,为子机配置文件,执行命令;

         

    详细代码:

    1. 邮件发送工具

    将以下代码创建到“/usr/bin/mail”文件内,并赋予执行权限(chmod +x /usr/bin/mail)

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import sys
    import smtplib
    import email.mime.multipart
    import email.mime.text
    
    server = 'smtp.163.com'
    port = '25'
    
    def sendmail(server,port,user,pwd,msg):
        smtp = smtplib.SMTP()
        smtp.connect(server,port)
        smtp.login(user, pwd)
        smtp.sendmail(msg['from'], msg['to'], msg.as_string())
        smtp.quit()
        print('邮件发送成功email has send out !')
    
    
    if __name__ == '__main__':
        msg = email.mime.multipart.MIMEMultipart()
        msg['Subject'] = 'check your service of nginx and nfs'
        msg['From'] = 'python4_mail@163.com'
        msg['To'] = 'python4_recvmail@163.com'
        user = 'python4_mail'
        pwd = '123456789'
        content='%s
    %s' %('
    '.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式处理,专门针对我们的邮件格式
    
        txt = email.mime.text.MIMEText(content, _charset='utf-8')
        msg.attach(txt)
    
        sendmail(server,port,user,pwd,msg)
    View Code

    python通过SMTP发送邮件失败:
    错误1:smtplib.SMTPAuthenticationError: (550, b‘User has no permission‘)
          我们使用python发送邮件时相当于自定义客户端根据用户名和密码登录,然后使用SMTP服务发送邮件,新注册的163邮箱是默认不开启客户端授权的(对指定的邮箱大师客户端默认开启),因此登录总是被拒绝,解决办法(以163邮箱为例):进入163邮箱-设置-客户端授权密码-开启(授权码是用于登录第三方邮件客户端的专用密码)
    错误2:smtplib.SMTPAuthenticationError: (535, b‘Error: authentication failed‘)
        以163邮箱为例,在开启POP3/SMTP服务,并开启客户端授权密码时会设置授权码,将这个授权码代替smtplib.SMTP().login(user,password)方法中的password即可。

    2. nfc.sh监控脚本

    #! /bin/bash
    
    #nginx及nfs服务监控脚本,如果异常,将发送邮件通知
    function monitor_nfc() {
    systemctl status nginx
    nginx=$?
    systemctl status nfs
    nfs=$?
    clear
    if [ $nginx -eq 0 ] && [ $nfs -eq 0 ]
            then
            msg="TIME:$(date +%F_%T)
                HOSTNAME:$(hostname)
                IPADDR:$(ifconfig |awk 'NR==2{print $2}')
                MSG:nginx.service and nfs.service is both running"
             echo msg
    #        /usr/bin/mail $msg    #服务运行正常,不发送邮件通知
    elif [ $nginx -ne 0 ] && [ $nfs -eq 0 ]
            then
            msg="TIME:$(date +%F_%T)
                 HOSTNAME:$(hostname)
                 IPADDR:$(ifconfig |awk 'NR==2{print $2}')
                 MSG:nginx.service is dead,nfs.service is running"
            echo $msg
            /usr/bin/mail $msg
    elif [ $nginx -ne 0 ] && [ $nfs -ne 0 ]
            then
            msg="TIME:$(date +%F_%T)
                 HOSTNAME:$(hostname)
                 IPADDR:$(ifconfig |awk 'NR==2{print $2}')
                 MSG:nginx.service and nfs.service is both dead"
            echo $msg
            /usr/bin/mail $msg
    elif [ $nginx -eq 0 ] && [ $nfs -ne 0 ]
            then
            msg="TIME:$(date +%F_%T)
                 HOSTNAME:$(hostname)
                 IPADDR:$(ifconfig |awk 'NR==2{print $2}')
                 MSG:nginx.service is running,nfs.service is dead"
            echo $msg
            /usr/bin/mail $msg
    
    fi
    }
    
    
    monitor_nfc &>> /tmp/monitor.log
    View Code

    3. nfc-install监控部署脚本

    #! /bin/bash
    
    #首先执行主机的nfc.sh服务监控脚本
    /root/nfc.sh
    
    #然后将主机的服务监控脚本nfc.sh和发送邮件文件上传至web机器
    for i in {134,135,136}
    do
    scp /root/nfc.sh 192.168.47.$i:/share/            #将主机的服务监控脚本nfc.sh上传至web机器
    scp /usr/bin/mail 192.168.47.$i:/usr/bin/        #将发送邮件文件上传至web机器
    ssh root@192.168.47.$i chmod +x /share/nfc.sh        #增加nfc脚本文件的执行权限
    ssh root@192.168.47.$i chmod +x /usr/bin/mail        #增加发送邮件文件的执行权限
    ssh root@192.168.47.$i /share/nfc.sh            #执行nfc脚本监控功能
    done
    
    ssh 192.168.47.133           #最终回到主机终端
    View Code

    详见图片

    结果:

    主机

    子机1

    参考资料

    1. http://www.cnblogs.com/linhaifeng/p/6602149.html

  • 相关阅读:
    一 数据库备份与恢复 2 数据库恢复 2.2 数据库重定向与重建
    附录 常用SQL语句 Dynamic SQL
    alt_disk_install 克隆系统rootvg
    Mysql版本升级
    DB29.7 HADR环境升级
    EMC VNX系列存储维护
    保存最开始的flink code,  数据是自动生成而不是通过kafka
    opentsdb restful api使用方法
    flink 和 hbase的链接
    opentsdb
  • 原文地址:https://www.cnblogs.com/OldJack/p/6618266.html
Copyright © 2011-2022 走看看