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)

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

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           #最终回到主机终端

详见图片

结果:

主机

子机1



以上就是Linux基础之-利用shell脚本实现自动监控系统服务的全部内容了,更多内容请关注:CPP学习网_CPP大学

本文固定链接:CPP学习网_CPP大学-Linux基础之-利用shell脚本实现自动监控系统服务

时间: 2024-12-26 17:17:25

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

Linux基础知识:SHELL脚本;find查找、tar压缩;sed文件处理工具

Shell脚本编程基础?程序?程序:算法+数据结构?数据:是程序的核心?数据结构:数据在计算机中的类型和组织方式?算法:处理数据的方式?程序编程风格:过程式:以指令为中心,数据服务于指令对象式:以数据为中心,指令服务于数据?shell程序:提供了编程能力,解释执行高级编程语言:编译:高级语言-->编译器-->机器代码-->执行C,C++解释:高级语言-->执行-->解释器-->机器代码shell,python,php,JavaScript,perl编译语言:像吃大餐,做

Shell 脚本来自动监控 Linux 系统的内存

# vim /scripts/swap-warning.sh #!/bin/bash #提取本服务器的IP地址信息 IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` #系统分配的交换分区总量 swap_total=`free -m | grep Swap | awk '{print $2}'` #当前剩余的交换分区free大小 swap_free=`

linux下SSH服务利用shell脚本实现密钥的批量分发与执行

SSH项目利用shell脚本实现密钥的批量分发与执行 1 ssh密钥的批量分发 开始安装sshpass免交互工具并进行SSH-key的批量分发 1.1 下载epel源并更新yum仓库 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y clean all yum makecache 1.2 安装sshpass工具 yum -y install sshpass 2 创建密钥文件 2

利用shell脚本实现计划任务功能 V1.2

2013.05.10  mytask 1.2 主程序休眠时间分成若干小的时间片断分段休眠,避免长时间的休眠不能及时响应系统信号. 2013.05.07 mytask 1.1 昨天发布了mytask1.0 版后(利用shell脚本实现计划任务功能),一直在想着如何解决那个最后的遗留问题"每个任务脚本中声明的函数名必须唯一不能重复,否则会导致任务函数覆盖.",无意间自问了一句为什么不能像crontab那样直接调用脚本和命令呢?这一问才让自己回忆起来,之所以用function封装任务是因为早

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性 作者:赵全文  网名:guestart 我们生产环境的Oracle数据库都做了RMAN备份,是采用了一周的RMAN备份保留策略:除了使用RMAN备份以外,我们还使用了爱数(Eisoo)备份软件来进行备份,可以说是做到了有备无患.可是,如果有一天,Oracle数据库由于主机层面硬件原因或是数据库层面的原因不能对外提供高可用服务的时候,假设数据丢了一大部分,我们只有用RMAN备份来进行恢复,再如果发现,RMAN备份失效了,那就往地缝里

<<linux命令行与shell脚本编程大全>>学习笔记(1)

一章初识linux shell 一.什么是linux 1.linux系统可大致划分为四部分: l Linux内核 l GNU工具组件 l 图形化桌面环境 l 应用软件 在linux系统里,这四部分中的每一部分都扮演着一个特别的角色,但如果将他们分开,每一部分都没太大的作用. 1)探究linux内核 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件,必要时分配硬件,有时需要执行软件. 内核基本负责以下四项主要功能: l 系统内存管理 l 软件程序管理 l 硬件设备管理 l 文件系

linux基础正则表达式、shell基础、文件查找和压缩

linux基础正则表达式.shell基础.文件查找和压缩 1.shell编程显示电脑的基本信息,初级基础脚本.只适合6.7版本的. COLOR="\033[1;36m" COLOREND="\033[0m" echo -e "CPU type is $COLOR `lscpu |grep 'Model name'|tr -s ' '|cut -d: -f2`$COLOREND" echo -e "Disk space is $COLOR

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器 作者:赵全文 网名:guestart 我们有一套生产环境的Oracle数据库,虽然每天都有RMAN备份,但是也招架不住开发人员隔三差五就说要恢复几张表的前几天的数据到生产环境当中,针对这样的需求,用RMAN来恢复某几张表的数据就显的特别费劲了.于是我决定用Oracle数据库的逻辑备份工具EXPDP(数据泵导出)专门导出特定用户下的所有表的数据,并在每天凌晨4点通过LINUX操作系统的CRONTAB的计划任务定时执