在现代运维与自动化流程中,定期通过邮件发送报告或监控状态是常见需求。Python 凭借丰富的库生态(如 smtplib、pandas)成为实现此类任务的首选语言。在 CentOS 7/8 环境下,我们梳理了五种主流调度方案,从系统原生到企业级队列,帮助你根据场景选择最合适的策略。
经典基石:Cron 作业
Cron 是 Linux 系统中最经典的定时任务工具,由 crond 守护进程和配置文件组成。它每分钟检查一次任务列表,适合简单、周期性的脚本执行。
1. 编写脚本
首先确保你的 Python 脚本可独立运行。建议将敏感信息(如密码)放入环境变量或配置文件中,避免硬编码。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from datetime import datetime
SMTP_SERVER = "smtp.office365.com"
SMTP_PORT = 587
SENDER_EMAIL = "[email protected]"
SENDER_PASSWORD = "your_secure_password" # 建议使用应用专用密码
RECIPIENT_EMAIL = "[email protected]"
def generate_report():
report_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return f"<h1>每日业务报告</h1><p>生成时间:{report_time}</p>"
def send_email(subject, body):
msg = MIMEMultipart()
msg['From'] = SENDER_EMAIL
msg['To'] = RECIPIENT_EMAIL
msg['Subject'] = subject
msg.attach(MIMEText(body, 'html'))
try:
server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
server.starttls()
server.login(SENDER_EMAIL, SENDER_PASSWORD)
server.sendmail(SENDER_EMAIL, RECIPIENT_EMAIL, msg.as_string())
print(f"[{datetime.now()}] 邮件发送成功!")
Exception e:
()
:
server.quit()
__name__ == :
send_email(, generate_report())


