Linux下Node.js日志备份方法
一 核心思路与准备
二 方法一 使用 logrotate 做日志轮转与本地归档
/var/log/nodejs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 node node
sharedscripts
postrotate
# 根据进程管理方式选择其一
systemctl reload my-nodejs.service >/dev/null 2>&1 || true
# 或 kill -USR1 $(cat /var/run/nodejs.pid) 2>/dev/null || true
endscript
}
sudo logrotate -d /etc/logrotate.d/nodejssudo logrotate -f /etc/logrotate.d/nodejs三 方法二 使用 Shell 脚本配合 tar rsync 做周期性备份
#!/bin/bash
set -e
LOG_DIR="/var/log/nodejs"
BACKUP_DIR="/backup/nodejs"
DATE=$(date +%Y%m%d)
mkdir -p "$BACKUP_DIR/$DATE"
tar -czf "$BACKUP_DIR/$DATE/app-$DATE.tar.gz" -C "$LOG_DIR" .
# 可选:加密
# gpg --symmetric --cipher-algo AES256 "$BACKUP_DIR/$DATE/app-$DATE.tar.gz"
# 清理30天前备份
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +30 -delete
#!/bin/bash
BACKUP_DIR="/backup/nodejs"
REMOTE_USER="backup"
REMOTE_IP="192.168.1.100"
REMOTE_DIR="/remote/backup/nodejs"
rsync -avz --delete "$BACKUP_DIR/" "$REMOTE_USER@$REMOTE_IP:$REMOTE_DIR"
# 每天 02:00 本地打包
0 2 * * * /usr/local/bin/backup_logs.sh
# 每天 03:00 远程同步
0 3 * * * /usr/local/bin/backup_logs_remote.sh
四 方法三 应用内轮转与集中式日志
const winston = require('winston');
const { DailyRotateFile } = require('winston-daily-rotate-file');
const logger = winston.createLogger({
transports: [
new DailyRotateFile({
filename: '/var/log/nodejs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
})
]
});
五 恢复与校验及注意事项
tar -xzvf /backup/nodejs/app-2025-09-30.tar.gz -C /var/log/nodejsrsync -avz user@ip:/remote/backup/nodejs/ /backup/nodejs/ 再按需解压或直接使用。