外观
3.3 执行日志查看
约 669 字
自动化日志
本页对应「三、操作步骤」的 3.3,按时间与退出码检索任务日志,确认任务按时执行、结果符合预期,并让失败在无人值守时也能被发现。返回上级:自动化任务。
前置条件
- 3.2 的定时任务已触发至少一次,
/srv/axis/logs/下存在日志文件。 - 已知日志格式:每行以
YYYY-MM-DD HH:MM:SS开头,关键字包含START、END、FAIL。 - 需要判断的窗口明确,例如“最近 24 小时”或“某次发布之后”。
- 已确认排查时看的日志路径与脚本中的重定向路径一致,避免打开的是旧文件。
- 已确认本次判断的时间范围,窗口外的日志不作为结论依据。
操作步骤
- 查看最近若干行,先确认任务是否按期执行:
tail -n 20 /srv/axis/logs/check.log
ls -l /srv/axis/logs/- 按时间窗口过滤,统计执行次数与失败次数:
since=$(date -d '24 hours ago' '+%F %T')
awk -v s="$since" '$0 >= s' /srv/axis/logs/check.log | grep -c 'START'
awk -v s="$since" '$0 >= s' /srv/axis/logs/check.log | grep -c 'FAIL'- 提取失败上下文,定位是哪一步出错:
grep -n 'FAIL' /srv/axis/logs/check.log | tail -n 10
grep -B2 -A2 'FAIL' /srv/axis/logs/check.log | tail -n 20- 检查 cron 自身的执行记录,区分“脚本失败”与“根本没触发”:
grep -i "check.sh" /var/log/syslog 2>/dev/null | tail -n 10
grep -i "check.sh" /var/log/cron 2>/dev/null | tail -n 10结果确认
- 时间窗口内的
START次数与任务计划次数一致,缺失说明未触发。 START与END成对出现;只有START没有END说明执行中断。- 失败行能对上具体错误,例如状态码不符或目标不可达,而不是笼统的“出错”。
- 系统日志中能看到该任务被调度,时间与业务日志吻合。
注意事项
- 日志要定期切分或归档,单文件过大会让检索变慢,也会占满磁盘。
- 只在脚本里写“成功”不够,失败必须伴随非 0 退出码,才能被监控捕获。
- 排查时先保留原始日志再动手修改,清理日志会丢失复现依据。
- 日志轮转要与排查周期匹配,保留天数至少覆盖两个发布周期,否则无法对比前后差异。
- 失败告警不要只发到个人邮箱,接入公共告警通道并写明任务名与失败原因,换班时也能接手。
- 长时间运行的任务要在日志里输出进度,只有开始与结束两行时,中断后无法判断停在哪一步。