使用logrotate工具
sudo apt-get install logrotate/etc/logrotate.d/nodejs-logs,添加以下内容:/path/to/nodejs/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
postrotate
/usr/sbin/killall -HUP node
endscript
}
sudo logrotate -d /etc/logrotate.d/nodejs-logs && sudo logrotate -f /etc/logrotate.d/nodejs-logs。编写Shell脚本+定时任务
backup_logs.sh):#!/bin/bash
LOG_DIR="/path/to/logs"
BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d)
mkdir -p "$BACKUP_DIR/$DATE"
tar -czvf "$BACKUP_DIR/$DATE/logs.tar.gz" -C "$LOG_DIR" .
chmod +x backup_logs.shcrontab -e → 添加 0 2 * * * /path/to/backup_logs.sh。使用Node.js脚本
backup-logs.js):const fs = require('fs');
const path = require('path');
const { exec } = require('child_process');
const logDir = '/path/to/logs';
const backupDir = '/path/to/backup';
const date = new Date().toISOString().replace(/[:.]/g, '-');
exec(`cp ${logDir}/*.log ${backupDir}/${date} && tar -czvf ${backupDir}/${date}.tar.gz -C ${backupDir} ${date}`, (err) => {
if (err) console.error('备份失败:', err);
else console.log('备份成功');
});
crontab定时执行:0 2 * * * /usr/bin/node /path/to/backup-logs.js。解压备份文件
使用tar命令解压至原日志路径:
tar -xzvf /path/to/backup/logs.tar.gz -C /path/to/logs。
使用备份工具同步
若为远程备份,可通过rsync恢复:
rsync -avz /path/to/backup/logs/ user@remote:/path/to/logs/。
借助第三方工具
若使用ELK Stack等集中式日志管理工具,可通过其恢复功能获取历史日志。
logrotate)和远程备份,避免本地单点故障。参考来源:[1,2,3,4,9,10,11,12,14]