尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Linux定时发送HTML邮件报告:crontab+mailx实战
1. 项目概述最近在做一个服务器监控项目时需要每天定时发送包含统计数据的邮件报告。经过反复测试最终用crontabmailxHTML表格的方案完美解决了这个问题。这个方案特别适合需要定期发送格式化数据的场景比如每日服务器状态报告周报数据汇总监控系统告警自动化测试结果通知2. 环境准备2.1 安装mailx工具在Ubuntu/Debian系统上sudo apt-get install mailutils在CentOS/RHEL系统上sudo yum install mailx注意不同Linux发行版的邮件工具包名称可能不同如果遇到问题可以尝试搜索你的发行版 安装mailx2.2 配置邮件发送编辑/etc/mail.rc文件添加SMTP配置set fromyour_emailexample.com set smtpsmtp.example.com set smtp-auth-userusername set smtp-auth-passwordpassword set smtp-authlogin3. 创建HTML邮件模板3.1 基础HTML结构创建一个report.html文件!DOCTYPE html html head title每日报告/title style table {border-collapse: collapse; width: 100%;} th, td {border: 1px solid #ddd; padding: 8px; text-align: left;} th {background-color: #f2f2f2;} tr:nth-child(even) {background-color: #f9f9f9;} /style /head body h2服务器状态日报/h2 p生成时间$(date)/p table tr th指标/th th数值/th th状态/th /tr tr tdCPU使用率/td td$(top -bn1 | grep Cpu(s) | awk {print $2})%/td td正常/td /tr !-- 更多行... -- /table /body /html3.2 动态数据填充使用shell脚本动态生成HTML内容#!/bin/bash CPU_USAGE$(top -bn1 | grep Cpu(s) | awk {print $2}) MEM_USAGE$(free -m | awk /Mem:/ {print $3}) DISK_USAGE$(df -h | awk /\/$/ {print $5}) cat /tmp/report.html EOF !DOCTYPE html html !-- 同上省略... -- tr tdCPU使用率/td td${CPU_USAGE}%/td td$( [ $(echo $CPU_USAGE 90 | bc) -eq 1 ] echo 警告 || echo 正常 )/td /tr EOF4. 设置crontab定时任务4.1 创建发送脚本创建send_report.sh#!/bin/bash # 生成报告 ./generate_report.sh # 发送邮件 mailx -a Content-type: text/html -s 每日服务器报告 recipientexample.com /tmp/report.html4.2 配置crontab编辑crontabcrontab -e添加每天8点发送的定时任务0 8 * * * /path/to/send_report.sh5. 常见问题解决5.1 邮件发送失败检查点确保mailx配置正确检查SMTP服务器是否需要特殊端口查看/var/log/mail.log日志5.2 HTML显示不正常解决方案确保邮件头包含Content-type: text/html避免使用复杂的CSS某些邮件客户端支持有限测试不同邮件客户端的显示效果5.3 时区问题如果crontab执行时间与预期不符# 查看系统时区 timedatectl # 设置时区 sudo timedatectl set-timezone Asia/Shanghai6. 高级技巧6.1 添加附件在mailx命令中添加附件mailx -a Content-type: text/html -a /path/to/attachment.pdf -s 报告 recipientexample.com report.html6.2 多收件人发送用逗号分隔多个收件人mailx -a Content-type: text/html -s 报告 user1example.com,user2example.com report.html6.3 邮件优先级设置添加重要级别头mailx -a Content-type: text/html -a X-Priority: 1 -s 重要服务器告警 recipientexample.com alert.html7. 实际应用案例7.1 服务器监控日报#!/bin/bash # 获取系统信息 HOSTNAME$(hostname) LOAD$(uptime | awk -Fload average: {print $2}) DISK$(df -h | grep -vE ^Filesystem|tmpfs | awk {print $1 $5}) # 生成HTML cat /tmp/server_report.html EOF !DOCTYPE html html head title服务器日报 - ${HOSTNAME}/title style /* 样式省略 */ /style /head body h2${HOSTNAME} 服务器状态/h2 p生成时间$(date %Y-%m-%d %H:%M:%S)/p h3系统负载/h3 p${LOAD}/p h3磁盘使用/h3 ul EOF echo $DISK | while read line; do echo li${line}/li /tmp/server_report.html done cat /tmp/server_report.html EOF /ul /body /html EOF # 发送邮件 mailx -a Content-type: text/html -s ${HOSTNAME} 服务器日报 adminexample.com /tmp/server_report.html7.2 数据库备份报告#!/bin/bash # 执行备份 mysqldump -u root -pPASSWORD database /backups/db_$(date %Y%m%d).sql # 生成报告 cat /tmp/db_report.html EOF !DOCTYPE html html head title数据库备份报告/title /head body h2数据库备份完成/h2 p备份时间$(date)/p p备份文件大小$(du -h /backups/db_$(date %Y%m%d).sql | awk {print $1})/p /body /html EOF # 发送邮件 mailx -a Content-type: text/html -a /backups/db_$(date %Y%m%d).sql -s 数据库备份报告 dbaexample.com /tmp/db_report.html8. 安全注意事项不要在脚本中硬编码密码使用环境变量或配置文件设置适当的文件权限chmod 700 send_report.sh chmod 600 /etc/mail.rc定期清理临时HTML文件使用加密连接SMTP如果服务器支持9. 性能优化建议对于复杂的报告考虑先用Python等语言生成HTML再用shell调用如果报告数据量大可以压缩后作为附件发送设置邮件发送重试机制MAX_RETRY3 COUNT0 while [ $COUNT -lt $MAX_RETRY ]; do mailx -a Content-type: text/html -s 报告 recipientexample.com report.html break COUNT$((COUNT1)) sleep 60 done10. 扩展应用10.1 与监控系统集成结合Prometheus等监控系统#!/bin/bash # 从Prometheus API获取数据 CPU_LOAD$(curl -s http://localhost:9090/api/v1/query?querynode_load1 | jq -r .data.result[0].value[1]) # 生成HTML报告...10.2 多服务器汇总报告收集多台服务器数据后生成综合报告#!/bin/bash # 收集各服务器数据 ssh server1 top -bn1 | grep Cpu(s) | awk {print \$2} /tmp/server1_cpu ssh server2 free -m | awk /Mem:/ {print \$3} /tmp/server2_mem # 生成汇总HTML...10.3 交互式报告在HTML中加入简单的JavaScript交互script function toggleDetails(id) { var elem document.getElementById(id); elem.style.display elem.style.display none ? block : none; } /script button onclicktoggleDetails(details)显示详情/button div iddetails styledisplay:none !-- 详细内容 -- /div注意不是所有邮件客户端都支持JavaScript需要测试目标客户端的兼容性
RELATED

相关推荐

Spring框架常见报错解析与解决方案

Spring框架常见报错解析与解决方案

1. Spring框架报错全景解析手册作为Java生态中最主流的开发框架,Spring在简化企业级应用开发的同时,其复杂的内部机制也带来了各种"暗坑"。我整理了近三年在实际项目中遇到的47种高频报错场景,涵盖从启动异常到运行时错误的完整解决…

📅 2026/10/6 13:26:27
开源APS系统如何优化企业生产排程与出货计划

开源APS系统如何优化企业生产排程与出货计划

1. 开源APS排产系统如何重塑企业生产管理在制造业摸爬滚打十几年,我见过太多企业被生产排期问题折磨得焦头烂额。直到三年前接触到开源APS(Advanced Planning and Scheduling)系统,才真正体会到什么叫"四两拨千斤"。这套…

📅 2026/10/5 13:21:46
OpenAI API集成实战:从环境配置到生产部署的完整指南

OpenAI API集成实战:从环境配置到生产部署的完整指南

在实际项目中,集成和使用大型语言模型(LLM)API已成为提升开发效率和产品智能化的关键路径。然而,开发者常常面临几个核心痛点:如何稳定、合规地获取和使用这些服务,如何管理订阅与支付流程,以及…

📅 2026/8/23 2:06:57
MORE NEWS

更多资讯

📰

STM32CubeIDE V2.0.0实战:嵌入式开发工具链的集成与调试效率提升

做嵌入式开发这些年,我几乎把主流的工具链都摸过一遍,从早期用第三方编译器配合外部烧录工具,到后来各家芯片厂商自己出IDE,说实话折腾的过程里踩了不少坑。STM32CubeIDE这个工具,我算是从它刚推出就一路用过来的&…

📰

AI大模型时代Java与大数据开发者的能力升级与实战路径

最近不少讨论都围绕一个话题:AI 大模型到底会不会抢走程序员的饭碗。尤其是做 Java、大数据的同学,焦虑感往往更强。因为网上的声音总是很极端——一边说“Java 已经过时了,赶紧转 AI”,另一边说“大模型只是玩具,企业…

📰

公网IP云服务器入门指南:个人开发者从选型到部署实战

1. 一台公网 IP 云服务器,到底能帮你解决哪些实际问题1.1 从一个真实场景说起去年帮一个做独立开发的朋友排查问题,他花了整整两天时间,就为了让自己写的自动化脚本能在本地稳定跑起来。电脑一关,任务就断;网络一换&am…

📰

为杯子开14次评审会却让手机芯片上车,真正的品质靠什么?

1. 杯子开了14次评审会,时间到底去哪了最近圈子里有个吐槽特别扎心:某项目团队为一个杯子开了14次评审会,回头一看,汽车产品上却直接用了手机级芯片。这种反差让人忍不住怀疑,所谓“高品质”到底是认真做出来的&#x…

📰

STM32+MPU9250航向角稳定方案:磁力计椭球矫正与Madgwick优化

简介:本资源是一套面向嵌入式开发者与姿态解算初学者的完整实践方案,聚焦于MPU9250九轴传感器在STM32平台上的高精度航向角解算。通过正点原子阿波罗F429开发板采集原始加速度计、陀螺仪与磁力计数据,集成基于最小二乘法的椭球拟合磁力计校准…

📰

手写Tool Use:从OpenAI规范到生产级可观测实现

1. 项目概述:当“手写 Tool Use”成为面试新分水岭最近在多个技术社区和求职论坛上,频繁刷到类似标题:“面试官让我手写一个 Tool Use,我当场愣住”“Tool Use 已成大模型岗位硬门槛”“不写代码的 LLM 工程师正在被淘汰”。这背后…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬