可用Shell脚本定期检查Apache日志大小并超限告警或轮转:用stat -c "%s"获取字节数,设阈值如100MB(104857600字节),超限时用logger通知或logrotate轮转,通过crontab每10分钟执行一次。
可以用 Shell 脚本定期检查 Apache 日志文件(如 access.log 或 error.log)的大小,当超过设定阈值时触发告警或自动轮转。关键在于准确获取文件大小、合理设置阈值,并避免频繁误报。
Linux 下推荐用 stat 或 du 获取字节数,比 ls -lh 更适合脚本解析:
stat -c "%s" /var/log/apache2/access.log —— 直接输出字节数(推荐)du -b /var/log/apache2/access.log | awk '{print $1}' —— 兼容性更好,但略慢注意路径需根据实际安装调整(Debian/Ubuntu 默认在 /var/log/apache2/,CentOS/RHEL 在 /var/log/httpd/)。
把阈值设为变量,单位统一用字节便于比较。例如限制单个日志不超过 100MB:
MAX_SIZE=$((100 * 1024 * 1024))(即 104857600 字节)-gt 判断是否超限:if [ "$CURRENT_SIZE" -gt "$MAX_SIZE" ]; then ...
不建议直接删日志,优先选择安全动作:
mail 或 logger 记录系统日志,例如 logger "Apache access.log exceeds 100MB: $CURRENT_SIZE bytes"
logrotate 命令(前提是已配好配置):logrotate /etc/logrotate.d/apache2
gzip -f /var/log/apache2/access.log,再生成新空文件:truncate -s 0 /var/log/apache2/access.log
用 cron 每 10 分钟检查一次较合理(太频繁增加 I/O,太慢可能积压):
crontab -e
*/10 * * * * /path/to/check_apache_log.sh >/dev/null 2>&1
#!/bin/bash,并确保有执行权限:chmod +x check_apache_log.sh
不复杂但容易忽略权限和路径问题,测试时先手动运行脚本确认输出和动作是否符合预期。