本文目录导读:

我来详细说明如何用脚本自动备份Apache日志,以下是几种常用方法:
Shell脚本备份(最常用)
基础备份脚本
#!/bin/bash
# 配置变量
LOG_DIR="/var/log/apache2" # 根据实际路径修改
BACKUP_DIR="/backup/apache_logs"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30
LOG_FILES=("access.log" "error.log")
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份日志文件
for log_file in "${LOG_FILES[@]}"; do
if [ -f "$LOG_DIR/$log_file" ]; then
# 复制并压缩
cp "$LOG_DIR/$log_file" "$BACKUP_DIR/${log_file}_$DATE"
gzip "$BACKUP_DIR/${log_file}_$DATE"
# 清空原始日志(不删除文件)
> "$LOG_DIR/$log_file"
fi
done
# 删除旧备份
find $BACKUP_DIR -name "*.gz" -mtime +$RETENTION_DAYS -delete
# 记录日志
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 日志备份完成" >> /var/log/backup_apache.log
带有日志轮转的脚本
#!/bin/bash
# 配置
LOG_DIR="/var/log/apache2"
BACKUP_DIR="/backup/apache_logs"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="apache_logs_$DATE.tar.gz"
# 临时目录
TEMP_DIR="/tmp/apache_backup_$$"
# 清理函数
cleanup() {
rm -rf $TEMP_DIR
rm -f /tmp/log_files_$$
}
# 错误处理
trap cleanup EXIT
# 创建目录
mkdir -p $BACKUP_DIR $TEMP_DIR
# 复制日志文件到临时目录
cp $LOG_DIR/*.log $TEMP_DIR/ 2>/dev/null
# 打包压缩
cd $TEMP_DIR
tar -czf "$BACKUP_DIR/$BACKUP_FILE" *.log
# 清空原始日志
for log_file in $TEMP_DIR/*.log; do
filename=$(basename "$log_file")
> "$LOG_DIR/$filename"
done
# 设置权限
chmod 640 $BACKUP_DIR/$BACKUP_FILE
# 清理旧备份(保留30天)
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
# 记录备份信息
echo "$DATE - 备份文件: $BACKUP_FILE (大小: $(du -h $BACKUP_DIR/$BACKUP_FILE | cut -f1))" >> /var/log/backup_apache.log
使用logrotate(推荐系统级方案)
配置logrotate
创建配置文件 /etc/logrotate.d/apache-backup:
/var/log/apache2/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f /var/run/apache2/apache2.pid ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
dateext
dateformat -%Y%m%d
}
手动执行logrotate
# 测试配置 sudo logrotate -d /etc/logrotate.d/apache-backup # 强制执行 sudo logrotate -f /etc/logrotate.d/apache-backup
Python脚本(更灵活)
#!/usr/bin/env python3
import os
import shutil
import gzip
import datetime
import logging
from pathlib import Path
# 配置
LOG_DIR = "/var/log/apache2"
BACKUP_DIR = "/backup/apache_logs"
RETENTION_DAYS = 30
LOG_FILES = ["access.log", "error.log"]
# 设置日志
logging.basicConfig(
filename='/var/log/apache_backup.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def backup_apache_logs():
"""备份Apache日志"""
try:
# 创建备份目录
os.makedirs(BACKUP_DIR, exist_ok=True)
# 生成时间戳
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
# 备份每个日志文件
for log_file in LOG_FILES:
source_path = os.path.join(LOG_DIR, log_file)
if not os.path.exists(source_path):
logging.warning(f"日志文件不存在: {source_path}")
continue
# 创建备份文件名
backup_name = f"{log_file}_{timestamp}.gz"
backup_path = os.path.join(BACKUP_DIR, backup_name)
# 压缩并备份
with open(source_path, 'rb') as f_in:
with gzip.open(backup_path, 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
# 清空原始日志
open(source_path, 'w').close()
logging.info(f"已备份: {log_file} -> {backup_name}")
# 清理旧备份
cleanup_old_backups()
except Exception as e:
logging.error(f"备份失败: {str(e)}")
def cleanup_old_backups():
"""清理过期备份"""
cutoff_date = datetime.datetime.now() - datetime.timedelta(days=RETENTION_DAYS)
for backup_file in Path(BACKUP_DIR).glob("*.gz"):
file_mtime = datetime.datetime.fromtimestamp(backup_file.stat().st_mtime)
if file_mtime < cutoff_date:
backup_file.unlink()
logging.info(f"已删除旧备份: {backup_file.name}")
if __name__ == "__main__":
backup_apache_logs()
远程备份脚本
#!/bin/bash
# 配置
LOG_DIR="/var/log/apache2"
REMOTE_USER="backup_user"
REMOTE_HOST="backup.example.com"
REMOTE_DIR="/backup/apache_logs"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="apache_logs_$DATE.tar.gz"
# 创建临时目录
TEMP_DIR=$(mktemp -d)
# 复制日志
cp $LOG_DIR/*.log $TEMP_DIR/
# 压缩
cd $TEMP_DIR
tar -czf /tmp/$BACKUP_FILE *.log
# 远程传输
scp /tmp/$BACKUP_FILE ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/
# 清空日志
for log_file in $LOG_DIR/*.log; do
> "$log_file"
done
# 清理临时文件
rm -rf $TEMP_DIR /tmp/$BACKUP_FILE
echo "$(date) - 远程备份完成" >> /var/log/apache_backup.log
设置定时任务
添加到crontab
# 编辑crontab crontab -e # 添加以下行(每天凌晨2点执行) 0 2 * * * /path/to/backup_script.sh # 或者使用系统定时器(systemd) sudo systemctl enable apache-backup.timer
systemd定时器配置
创建 /etc/systemd/system/apache-backup.service:
[Unit] Description=Apache Log Backup Service [Service] Type=oneshot ExecStart=/usr/local/bin/backup_apache_logs.sh User=root
创建 /etc/systemd/system/apache-backup.timer:
[Unit] Description=Run Apache backup daily [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target
使用建议
- 测试环境验证:先在测试环境运行脚本
- 日志文件权限:确保脚本有读取权限
- 磁盘空间监控:定期检查备份目录大小
- 错误通知:添加邮件或短信通知功能
- 备份验证:定期测试备份文件的完整性
选择哪种方法取决于你的具体需求,对于一般场景使用Shell脚本配合crontab即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播