Node.js 在 Ubuntu 的日志备份策略
一 策略总览
二 本地轮转与压缩
/var/log/node-app/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 node node
copytruncate
dateext
}
三 归档与清理脚本
#!/usr/bin/env bash
set -Eeuo pipefail
SOURCE_DIR="/var/log/node-app"
BACKUP_DIR="/data/backup/node-app"
RETAIN_DAYS=7
DATE=$(date -d "yesterday" +%Y%m%d) # 归档“昨天”的日志
LOG="backup_${DATE}.log"
mkdir -p "$BACKUP_DIR"
# 打包昨日 .log 文件
tar -czf "$BACKUP_DIR/log_${DATE}.tar.gz" -C "$SOURCE_DIR" ./*.log 2>>"$BACKUP_DIR/$LOG"
if (( $? == 0 )); then
echo "[$(date)] 备份成功:$BACKUP_DIR/log_${DATE}.tar.gz" >>"$BACKUP_DIR/$LOG"
else
echo "[$(date)] 备份失败" >>"$BACKUP_DIR/$LOG"
exit 1
fi
# 清理过期备份
find "$BACKUP_DIR" -type f -mtime +"$RETAIN_DAYS" -name "*.tar.gz" -delete >>"$BACKUP_DIR/$LOG" 2>&1
echo "[$(date)] 清理完成,保留最近 $RETAIN_DAYS 天" >>"$BACKUP_DIR/$LOG"
四 远程备份与异地容灾
0 0 * * * rsync -avz --delete /data/backup/node-app/ user@remote:/backup/node-app/
五 监控 验证与常见坑