# -*- 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 参数就可以解决这个问题了