python发邮件实现Redis通知功能

时间:2023-03-08 20:07:36
python发邮件实现Redis通知功能

python发邮件实现Redis通知功能

# -*- coding:utf-8 -*-

import smtplib
#import os
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
#from email import encoders

user = 'ccccfz@163.com'
pwd = 'fz.19921218'
to = ['1980884174@qq.com']
msg = MIMEMultipart()
msg['Subject'] = 'Redis内存超标警报'
content1 = MIMEText('服务器内存已超过预设最大内存', 'plain', 'utf-8')
msg.attach(content1)  

#-----------------------------------------------------------
s = smtplib.SMTP('smtp.163.com')
s.login(user, pwd)
s.sendmail(user, to, msg.as_string())
print('发送邮件成功')
s.close()  
#! /bin/bash
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

export $PATH

port=

mem_target=0.005

maxmemory=$(redis-cli -p $port config get maxmemory | awk 'NR==2 {print $1}')

used_memory=$(redis-cli -p $port info memory | grep used_memory: | cut -d: -f2 )

mem_ratio=$(awk 'BEGIN {printf("%.4f",'$used_memory'/'$maxmemory')}')

 ] 

then 

    /root/Documents/Python-/python /root/Downloads/send_mail.py

fi

在Redis服务器上进行脚本监控。如果监控超过阈值,则请求JAVA程序代发邮件。

Shell脚本确实写着费劲
它还居然没有浮点运算
有两个方式可以实现浮点运算。
1.$(awk 'BEGIN {printf("%.2f",'$used_memory'/'$maxmemory')}')
2.$(echo "scale=2;$mem_ratio>$mem_target" | bc)

另外需要注意的是,top命令的结果默认是乱码,不能使用awk运算

使用top -b 参数就可以解决这个问题了

python发邮件实现Redis通知功能

python发邮件实现Redis通知功能