news 2026/5/5 21:09:30

服务器定时发送邮件设置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
服务器定时发送邮件设置

服务器定时发送邮件设置
crontab -e

"/tmp/crontab.srYPTQ"1L, 72B */10 * * * * /usr/bin/python3 /root/send_mail.py>>/root/mail.log2>&1

检查日志,并发送邮件

importosimportreimportsmtplibfromdatetimeimportdatetime,datefromemail.mime.textimportMIMETextfromemail.headerimportHeader# ========== 日志监控配置 ==========LOG_FILE="/root/xxx.log"KEYWORD="youtube"STATE_FILE="/root/mail_auto/log_monitor.state"# ========== QQ邮箱配置 ==========SMTP_HOST="smtp.qq.com"SMTP_PORT=465SENDER="你的QQ邮箱@qq.com"AUTH_CODE="你的QQ邮箱授权码"RECEIVER="接收报警的邮箱@example.com"defsend_email(subject,body):msg=MIMEText(body,"plain","utf-8")msg["From"]=SENDER msg["To"]=RECEIVER msg["Subject"]=Header(subject,"utf-8")withsmtplib.SMTP_SSL(SMTP_HOST,SMTP_PORT)asserver:server.login(SENDER,AUTH_CODE)server.sendmail(SENDER,[RECEIVER],msg.as_string())defget_last_position():ifnotos.path.exists(STATE_FILE):returnNonetry:withopen(STATE_FILE,"r")asf:returnint(f.read().strip())exceptException:returnNonedefsave_position(position):withopen(STATE_FILE,"w")asf:f.write(str(position))defparse_log_time(line):""" 匹配日志时间格式: 2026/05/03 14:20:00 """pattern=r"(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2})"match=re.search(pattern,line)ifnotmatch:returnNonetry:returndatetime.strptime(match.group(1),"%Y/%m/%d %H:%M:%S")exceptException:returnNonedeffilter_today_lines(content):today=date.today()today_lines=[]forlineincontent.splitlines():log_time=parse_log_time(line)iflog_timeisnotNoneandlog_time.date()==today:today_lines.append(line)return"\n".join(today_lines)defmonitor_log():ifnotos.path.exists(LOG_FILE):print(f"日志文件不存在:{LOG_FILE}")returncurrent_size=os.path.getsize(LOG_FILE)last_position=get_last_position()withopen(LOG_FILE,"r",encoding="utf-8",errors="ignore")asf:iflast_positionisNone:# 首次运行:读取整个日志,但只检查今天的内容print("首次运行:只检查今天的日志")content=f.read()check_content=filter_today_lines(content)else:# 如果日志被清空或轮转,从头开始ifcurrent_size<last_position:last_position=0f.seek(last_position)content=f.read()# 后续运行:只检查新增内容,并且只保留今天的日志check_content=filter_today_lines(content)new_position=f.tell()# 无论是否命中,都保存当前位置,避免重复检查save_position(new_position)ifKEYWORD.lower()incheck_content.lower():matched_lines=[]forlineincheck_content.splitlines():ifKEYWORD.lower()inline.lower():matched_lines.append(line)matched_text="\n".join(matched_lines[:20])subject=f"服务器日志报警:检测到关键词{KEYWORD}"body=f""" 检测到日志中出现关键词:{KEYWORD}日志文件:{LOG_FILE}匹配关键词:{KEYWORD}匹配到的日志如下:{matched_text}"""send_email(subject,body)print(f"检测到关键词{KEYWORD},已发送邮件")else:print(f"今天的新增日志中未检测到关键词{KEYWORD}")if__name__=="__main__":monitor_log()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 21:08:45

核心组件大换血:Backbone与Neck魔改篇:YOLO26缝合CSP-ResNeXt:2026分组卷积与跨阶段局部网络的终极形态

一、问题初现:为什么YOLO26的原始Backbone不够用了? 2026年的计算机视觉社区正在经历一场“Backbone大讨论”。从YOLOv3时代的Darknet-53,到YOLOv8引以为傲的CSPDarknet,再到YOLO26默认采用的C3k2模块——主干网络的迭代速度早已超越了检测头的进化。根据Ultralytics官方博…

作者头像 李华
网站建设 2026/5/5 21:07:44

终极指南:如何用KK-HF Patch完整解锁Koikatsu游戏潜力

终极指南&#xff1a;如何用KK-HF Patch完整解锁Koikatsu游戏潜力 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch KK-HF Patch 是Koikatu和Koikat…

作者头像 李华
网站建设 2026/5/5 21:06:39

AI写教材的秘密武器:低查重工具,让教材生成又快又好!

谁没有遇到过编写教材时的挫折呢&#xff1f;面对那张空白的文档&#xff0c;脑袋里一片空白&#xff0c;花了大半个小时却不知如何下手——应该先讲解概念还是先给出实例&#xff1f;章节安排是遵循逻辑还是按课程时间来分配呢&#xff1f;反复修改的大纲总是与课标不符&#…

作者头像 李华
网站建设 2026/5/5 21:05:44

超性感的轻量级openclaw平替,我给nanobot打call

故障表现 发现请求集群 demo 入口时卡住&#xff0c;并且对应 Pod 没有新的日志输出 rootce-demo-1:~# kubectl get pods -n deepflow-otel-spring-demo -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NO…

作者头像 李华
网站建设 2026/5/5 20:58:34

5款必装Illustrator脚本:让你的设计效率提升300%

5款必装Illustrator脚本&#xff1a;让你的设计效率提升300% 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 如果你每天在Adobe Illustrator中花费大量时间进行重复性操作&#xff…

作者头像 李华