利用 Apache 日志进行网站备份的实用方案
一 核心思路
二 快速上手流程
/var/log/apache2/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
手动测试:执行 sudo logrotate -v /etc/logrotate.conf;如需立即轮转执行 sudo logrotate -f /etc/logrotate.conf。tar -czvf /backup/apache2_logs_$(date +%Y%m%d).tar.gz /var/log/apache2
0 2 * * * /usr/bin/tar -czvf /backup/apache2_logs_$(date +\%Y\%m\%d).tar.gz /var/log/apache2
rsync -av /backup/ user@remote:/backup/
# 或
scp /backup/apache2_logs_*.tar.gz user@remote:/backup/
以上流程覆盖 Debian/Ubuntu 与 CentOS/RHEL 的常见路径与做法,兼顾自动化与可维护性。
三 进阶方案与自动化脚本
ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log.%Y%m%d 86400"
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log.%Y%m%d 86400" common
修改后重启 Apache:sudo systemctl restart httpd。#!/usr/bin/env bash
set -Eeuo pipefail
BACKUP_DIR="/backup/apache"
DATE=$(date +"%Y%m%d%H%M%S")
LOG_FILE="/var/log/apache_backup.log"
mkdir -p "$BACKUP_DIR"
# 发行版差异
if [ -d /etc/apache2 ]; then
CONF_DIR="/etc/apache2"
LOG_DIR="/var/log/apache2"
else
CONF_DIR="/etc/httpd/conf"
LOG_DIR="/var/log/httpd"
fi
BACKUP_FILE="$BACKUP_DIR/apache_backup_$DATE.tar.gz"
tar -czvf "$BACKUP_FILE" -C "$CONF_DIR" . -C "$LOG_DIR" . \
&& echo "[$DATE] SUCCESS: $BACKUP_FILE" >> "$LOG_FILE" \
|| { echo "[$DATE] FAILED: $BACKUP_FILE" >> "$LOG_FILE"; exit 1; }
# 可选:远程同步
# rsync -av --delete "$BACKUP_DIR/" user@remote:/backup/apache/ >> "$LOG_FILE" 2>&1
赋权并加入 cron(每天 02:00):chmod +x /usr/local/bin/backup_apache.sh
0 2 * * * /usr/local/bin/backup_apache.sh >> /var/log/apache_backup.log 2>&1
该脚本同时适用于 Debian/Ubuntu 与 CentOS/RHEL,并可在需要时扩展至网站文件与数据库备份。
四 恢复与校验
sudo tar -xzvf /backup/apache2_logs_YYYYMMDD.tar.gz -C /var/log/
sudo logrotate -f /etc/logrotate.conf