下面先分享python写的邮件报警脚本
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 1. 首先定义好脚本中的邮箱账号和密码
# 2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
# 系统库
import sys
# 邮件发送库
import smtplib
# 格式化邮件内容
from email.mime.text import MIMEText
# 多进程包
#from subprocess import *
def sendqqmail(username, password, mailfrom, mailto, subject, content):
try:
# msg是一个email.mime.text.MIMEText类
msg = MIMEText(content, _subtype='plain')
msg['FROM'] = mailfrom
msg['TO'] = mailto
msg['Reply-To'] = mailfrom
msg['Subject'] = subject
# 参数:服务器地址默认为空,端口默认为0,本地主机名默认为None,超时时间为进程执行退出后超时
smtp = smtplib.SMTP_SSL('smtp.exmail.qq.com', 465)
# 从服务器接受debug信息的级别
# smtp.set_debuglevel(0)
# 默认为本地域名:localhost.com
# smtp.ehlo()
# 登录
smtp.login(username, password)
# 发送邮件
smtp.sendmail(mailfrom, mailto, msg.as_string())
# 关闭会话
smtp.quit()
except Exception as err:
print("Send mail failed. Error: {err}".format(err=err))
def main():
mailto = sys.argv[1]
subject = sys.argv[2]
content = sys.argv[3]
# 定义邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
sendqqmail('邮箱', '那个发邮件的验证码', '邮箱', mailto, subject, content)
if __name__ == "__main__":
main()
检测域名证书到期脚本。
#!/bin/bash
for yuming in `cat /home/222/domain_name.txt` #读取存储了需要监测的域名的文件
do
END_TIME=$(echo | openssl s_client -servername $yuming -connect $yuming:443 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }' )
#使用openssl获取域名的证书情况,然后获取其中的到期时间
END_TIME1=$(date +%s -d "$END_TIME") #将日期转化为时间戳
NOW_TIME=$(date +%s -d "$(date | awk -F ' +' '{print $2,$3,$6}')") #将目前的日期也转化为时间戳
a=$(($(($END_TIME1-$NOW_TIME))/(60*60*24))) #到期时间减去目前时间再转化为天数
#echo ${a}
if [ $a -lt 100 ] #当到期时间小于100天时发邮件告警
then
python 2.py songxiucheng@yzsci.cn "服务器证书过期" "域名证书 $yuming 剩下 $a 天过期,请迅速更新"
fi
done
这里存放域名的文件我用的是绝对路径cat /home/222/domain_name.txt,但是调用邮件脚本用的是相对路径哈,有需要的自己改就好,因为这样就已经可以达到我的目的了,所以也就没有优化什么,有兴趣的同学可以自己研究研究修改优化一下。
注:服务器的编码调成utf-8不然转换出来的证书到期时间没法做运算会报一个错误
date: 无效的日期"08月 16日 CST"
check.sh:行14: 1659542400-: 语法错误: 期待操作数 (错误符号是 “-”)