温馨提示×

ubuntu定时器怎么设置邮件通知

小樊
39
2025-12-18 06:37:17
栏目: 智能运维

Ubuntu 定时器设置邮件通知

一、方案总览

  • 使用 cron 定时执行脚本,脚本内通过邮件客户端发送邮件;或在系统的 crontab 中直接利用 MAILTO 将任务输出作为邮件发送。
  • 常见邮件客户端:s-nail / heirloom-mailx(轻量、易配置 SMTP)、mutt + msmtp(灵活、可写日志、便于排错)。
  • 基本流程:安装客户端 → 配置 SMTP(发件邮箱、SMTP 地址、端口、授权码)→ 命令行测试 → 写成脚本 → 用 crontab 定时执行(或在 /etc/crontab 设置 MAILTO)。

二、方案一 s-nail 或 heirloom-mailx 快速配置

  • 安装
    • 安装 s-nail:sudo apt install s-nail
    • 或安装 heirloom-mailx:sudo apt install heirloom-mailx
  • 配置 SMTP(以 163 邮箱为例,编辑 /etc/s-nail.rc 或 ~/.mailrc)
    • set from=“your@163.com
    • set smtp=“smtp.163.com
    • set smtp-auth-user=“your@163.com
    • set smtp-auth-password=“你的SMTP授权码
    • set smtp-auth=login
    • 说明:多数邮箱需开启 SMTP 并使用“授权码”而非登录密码;如使用 SSL/TLS,常见端口为 465/587,可在 smtp= 中写成 smtps://smtp.xxx.com:465
  • 命令行测试
    • echo “邮件内容” | s-nail -s “标题to@xxx.com
    • 或 echo “邮件内容” | heirloom-mailx -vs “标题to@xxx.com
  • 脚本示例(/home/user/ipnow.sh)
    • #!/bin/bash IP=$(ip a | awk ‘/inet / && !/127.|::/{print $2; exit}’) ts=$(date “+%F %T”) echo “主机:$(hostname) 时间:$ts IP:$IP” | s-nail -s “[定时] $ts IP信息” to@xxx.com
    • 赋权:chmod +x /home/user/ipnow.sh
  • 定时执行(crontab -e)
    • 10 分钟:*/10 * * * * /home/user/ipnow.sh
    • 每天 08:30:30 8 * * * /home/user/ipnow.sh
    • 说明:cron 默认用 /bin/sh,脚本中建议使用绝对路径;如需捕获输出,可在命令后重定向到日志文件以便排查。

三、方案二 mutt + msmtp 更可控(推荐用于生产)

  • 安装
    • sudo apt install mutt msmtp
  • 配置 msmtp(~/.msmtprc,权限必须为 600
    • account default host smtp.163.com from your@163.com auth on user your@163.com password 你的授权码 port 465 tls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.log
    • chmod 600 ~/.msmtprc
  • 配置 mutt(/etc/muttrc 或 ~/.muttrc)
    • set sendmail=“/usr/bin/msmtp”
    • set use_from=yes
    • set realname=“发件人昵称
    • set from=“your@163.com
    • set envelope_from=yes
  • 命令行测试
    • echo “邮件内容” | mutt -s “标题to@xxx.com
    • 带附件:echo “内容” | mutt -s “标题to@xxx.com -a /path/file.txt
  • 脚本示例(/home/user/report.sh)
    • #!/bin/bash ts=$(date “+%F %T”) body=“主机:$(hostname) 时间:$ts 状态:OK” echo “$body” | mutt -s “[定时] $ts 报告” to@xxx.com -a /var/log/syslog
    • 赋权:chmod +x /home/user/report.sh
  • 定时执行(crontab -e)
    • 30 分钟:*/30 * * * * /home/user/report.sh >> /var/log/mailjob.log 2>&1
    • 说明:建议将 stdout/stderr 重定向到日志,便于 msmtp 与 cron 的排错(msmtp 的 logfile 记录发送细节)。

四、cron 输出邮件与系统级 MAILTO

  • 直接在 /etc/crontab 或 root 的 crontab 中使用 MAILTO
    • MAILTO=“admin@xxx.com
    • 0 2 * * * root /usr/local/bin/daily_report.sh
    • 说明:当任务有标准输出或错误输出时,cron 会尝试把输出作为邮件发送给 MAILTO 指定的地址;若 MAILTO=“” 则不发送邮件。此方式依赖系统邮件传输代理(MTA),若未配置 MTA,建议使用前述“脚本内调用 s-nail/msmtp”的方案更稳妥。

五、常见问题与排查

  • 认证失败:确认已开启邮箱 SMTP 并使用“授权码”,而非登录密码;检查用户名、密码、端口与加密方式是否匹配。
  • 命令未找到:在脚本中使用命令的绝对路径(如 /usr/bin/s-nail、/usr/bin/msmtp),或在 crontab 顶部设置 PATH。
  • 发送为空被拒:部分邮箱要求邮件必须有主题与正文,测试时确保 -s 与内容均不为空。
  • 附件参数差异:有的系统上附件参数是 -a,也有的是 -A,按所用客户端与系统调整。
  • 日志与排错:msmtp 使用 logfile 记录发送过程;cron 建议将任务输出重定向到日志文件,便于定位问题。

0