使用shell+python脚本实现系统监控并发送邮件

1、编辑shell脚本

[root@web03 ~/monitor_scripts]# cat inspect.sh 
#!/bin/bash

# 设置磁盘的阀值
disk_max=90

# 设置监控inode的分区
partition="/dev/sda3"

# 设置磁盘inode使用率的阀值
disk_inode_use=90

# 这是mem的阀值
mem_max_use=90

# CPU的空闲程度
cpu_less=10

function disk_space_info() {
    disk_used=$(df -h|grep /$|awk '{print $(NF-1)}'|cut -d% -f1)
    if [ $disk_used -gt $disk_max ];then
        Msg="TIME: $(date +%F-%T)
             HostName: $(hostname)
             IP: $(hostname -I)
             Info: 磁盘使用率超过80%,请及时处理!" 
        mail $Msg
    fi
}

function disk_inode_use() {
    inode_used=$(df -i /dev/sda3 |tail -1|awk -F'[ %]+' '{print $5}')
    if [ $inode_used -gt $disk_inode_use ];then
        Msg="TIME: $(date +%F-%T)
             HostName: $(hostname)
             IP: $(hostname -I)
             Info: ${partition}分区inode使用率超过${disk_inode_use}%,请及时处理!" 
        mail $Msg
    fi
}

function monitor_mem() {
    mem_used=$(free|grep Mem|awk '{printf ($3/$2)*100}'|cut -d. -f1)
    if [ $mem_used -gt $mem_max_use ];then
        Msg="TIME: $(date +%F-%T)
             HostName: $(hostname)
             IP: $(hostname -I)
             Info: 内存使用率超过${mem_max_use}%,请及时处理!"
        mail $Msg
    fi
}


function monitor_cpu() {
   cpu_used=$(vmstat 1 3|awk 'NR>=3{x=x+$(NF-2)} END {printf("%u",x/3)}')
   if [ $cpu_used -lt $cpu_less ];then
       Msg="TIME: $(date +%F-%T)
             HostName: $(hostname)
             IP: $(hostname -I)
             Info: cpu空闲率小于${cpu_less},请及时处理!"
        mail $Msg
   fi
}



disk_space_info
disk_inode_use
monitor_mem
monitor_cpu

2、编辑python脚本发送邮件

在使用的时候把mail文件授予x权限,再复制到/usr/bin,目录下当作命令执行。

[root@web03 ~/monitor_scripts]# cat mail 
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import smtplib
import email.mime.multipart
import email.mime.text

server = 'smtp.qq.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'] = '系统监控告警邮件'   # 邮件标题
    msg['From'] = '1402122292@qq.com'     # 发送方的邮箱地址
    msg['To'] = 'gonglovepj@gmail.com'    # 目的邮箱地址
    
    user = '1402122292@qq.com'     # 登陆的用户
    pwd = 'folgrpnvvjfxjijc'       # 授权码
    
    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)
posted @   Gshelldon  阅读(363)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示