验证apache日志切割脚本是否正常执行,需四步:1.查cron系统日志确认任务触发;2.比对切割前后日志文件状态;3.验证apache是否写入新日志并检查error.log;4.通过脚本日志输出确认执行结果与错误。

验证 Apache 日志切割脚本是否在 cron 中正常执行,关键不是“有没有运行”,而是“有没有按预期完成动作”——包括日志重命名、新日志生成、服务重载、无报错残留。下面分四步实操验证:
检查 cron 是否真正触发了脚本
直接查看 cron 的系统日志,确认任务被调用过:
- 运行 sudo grep CRON /var/log/syslog(Debian/Ubuntu)或 sudo grep CRON /var/log/cron(CentOS/RHEL)
- 查找类似这样的记录:Aug 20 01:00:01 server CRON[12345]: (root) CMD (/usr/local/bin/rotate_apache_logs.sh)
- 如果没有对应时间点的记录,说明 cron 没有执行该任务,需检查 crontab -e 是否保存成功、用户权限、路径是否绝对、是否用了 root 权限(Apache 日志通常需 root 才能移动和 reload)
确认日志文件状态是否符合切割逻辑
手动模拟一次脚本行为后,比对前后变化:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 执行前:检查 ls -lt /var/log/apache2/access.log*,应只有
access.log和可能的旧备份 - 执行后(或等 cron 触发后):再次运行相同命令,应看到类似
access.log.1、error.log.1出现,且access.log文件大小为 0 或很小(刚重建) - 用 stat /var/log/apache2/access.log 查看修改时间,确认是否在 cron 设定时间之后更新过
验证 Apache 是否继续写入新日志
切割后若 Apache 还往旧文件写,说明 reload 失败或信号未生效:
- 执行 sudo tail -f /var/log/apache2/access.log,再发起一个请求(如
curl http://localhost) - 观察是否有新日志行实时出现;若没有,说明新日志文件未被 Apache 使用,可能是
service apache2 reload失败,或配置中日志路径写错 - 检查 Apache 错误日志:sudo tail -n 20 /var/log/apache2/error.log,看 reload 时有无 “Failed to reload”、“Permission denied” 等提示
检查脚本执行输出与错误记录
让脚本把过程和异常都留下痕迹,是最可靠的验证方式:
- 修改你的脚本末尾加日志语句,例如:
echo "[$(date)] rotation done, $(ls -lh /var/log/apache2/access.log*)" >> /var/log/apache_rotation.log - 在 crontab 中重定向输出:
0 1 * * * /usr/local/bin/rotate_apache_logs.sh >> /var/log/apache_rotation.log 2>&1 - 定时执行后,用 tail -n 20 /var/log/apache_rotation.log 查看是否含成功信息,或出现
mv: cannot stat、reload failed等错误









