Linux基础之-利用shell脚本实现自动监控系统服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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] = [email protected]
    msg[To] = [email protected]
    user = python4_mail
    pwd = 123456789
    content=%s\\n%s %(\\n.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 [email protected]192.168.47.$i chmod +x /share/nfc.sh        #增加nfc脚本文件的执行权限
ssh [email protected]192.168.47.$i chmod +x /usr/bin/mail        #增加发送邮件文件的执行权限
ssh [email protected]192.168.47.$i /share/nfc.sh            #执行nfc脚本监控功能
done

ssh 192.168.47.133           #最终回到主机终端

View Code

详见图片

技术分享

结果:

主机

技术分享

子机1

技术分享







以上是关于Linux基础之-利用shell脚本实现自动监控系统服务的主要内容,如果未能解决你的问题,请参考以下文章

Linux下shell脚本监控Tomcat的状态并实现自动启动

Linux编写Shell脚本利用expect实现免问答ssh登录服务器

linux基础学习-17-linux操作系统之Shell编程基础讲解

linux实现shell脚本监控磁盘内存达到阈值时清理catalina.out日志

利用shell脚本监控linux中CPU利用率。

利用Shell脚本监控Linux系统的内存