linux定时任务监控需捕获退出码、记录日志、使用状态文件标记,并通过轻量脚本定期检查超时/失败/缺失done等异常,结合邮件或企微告警,支持csv归档与简易可视化。

Linux定时任务(cron)本身不提供任务执行状态的反馈机制,监控需依赖外部手段实现。核心思路是:捕获任务执行结果、记录关键指标、建立告警通路。
执行日志与退出码捕获
每个定时任务应明确输出日志路径,并在脚本末尾检查并记录退出码。避免仅靠标准输出判断成功,因为部分命令即使出错也不一定写入stderr。
- 在crontab中统一重定向: * * * * * /path/to/script.sh >> /var/log/cron/script.log 2>&1; echo "EXIT:$?" >> /var/log/cron/script.log
- 脚本内使用 set -e 或显式判断关键命令返回值,失败时主动 exit 非0码
- 日志按天轮转,配合 logrotate 防止膨胀
状态标记文件机制
适用于需要感知“是否已运行”的场景(如防止重复执行或确认调度到达)。用轻量级文件作为运行锁和状态快照。
- 任务开始前 touch /tmp/.job_xxx.running;成功结束时 mv 为 /tmp/.job_xxx.done;失败则写 /tmp/.job_xxx.failed 并保留错误信息
- 独立监控脚本定期扫描这些标记文件,检查是否存在 .running 超时(如 >30 分钟)、.done 是否最新(如 24 小时内)、.failed 是否非空
- 标记文件名建议含日期后缀(如 .job_xxx.done.20240520),便于追溯
统一采集与轻量告警
不依赖复杂监控平台,可用 shell + cron + 邮件/企微机器人实现闭环。
- 每5分钟执行一次监控检查脚本,汇总异常任务(超时、失败、无done文件、日志无新内容)
- 通过 mail 命令发邮件,或调用企业微信 webhook 发送简洁文本(含任务名、最后日志片段、时间戳)
- 告警内容必须包含可定位信息:主机名、任务标识、最近一次尝试时间、退出码、日志尾行(tail -n1)
可视化与归档(可选增强)
对多机或多任务环境,建议将状态数据导出为结构化格式,供简单展示或审计。
- 监控脚本将每次检查结果以 CSV 格式追加到 /var/log/cron/status.csv,字段包括:host, job_name, status, last_run, exit_code, check_time
- 用 awk/grep 快速生成日报:统计当日失败次数、平均执行时长(从日志时间戳推算)、最长挂起任务
- 前端可用静态 HTML 表格加载 CSV,或接入 Grafana 的 simple-json 插件做基础看板










