Ubuntu下Node.js日志自動化備份的實現方法
logrotate是Ubuntu系統自帶的日志管理工具,可自動完成日志的輪轉、壓縮、刪除及通知等操作,是Node.js日志自動化備份的首選方案。
配置步驟:
sudo apt install logrotate。/etc/logrotate.d/目錄下新建文件(如nodejs_app),內容如下(根據實際路徑調整):/path/to/your/nodejs/app/logs/*.log {
daily # 每天輪轉
rotate 7 # 保留最近7天的日志
compress # 壓縮舊日志(gzip格式)
delaycompress # 延遲壓縮(避免當天日志被立即壓縮)
missingok # 日志文件不存在時不報錯
notifempty # 日志為空時不輪轉
create 0640 root adm # 創建新日志文件時設置權限
}
sudo logrotate -vf /etc/logrotate.d/nodejs_app。/etc/cron.daily/logrotate)每日自動執行,無需額外配置。若需要更個性化的備份邏輯(如備份到遠程服務器、添加額外校驗),可通過Shell腳本結合cron定時任務實現。
操作步驟:
/usr/local/bin/backup_nodejs_logs.sh):#!/bin/bash
LOG_DIR="/path/to/your/nodejs/app/logs" # 日志源目錄
BACKUP_DIR="/path/to/backup/nodejs_logs" # 備份目標目錄
DATE=$(date +"%Y%m%d_%H%M%S") # 當前時間戳
BACKUP_FILE="${BACKUP_DIR}/logs_backup_${DATE}.tar.gz"
# 創建備份目錄(若不存在)
mkdir -p "$BACKUP_DIR"
# 壓縮日志文件
tar -czf "$BACKUP_FILE" -C "$LOG_DIR" .
# 刪除超過30天的舊備份(避免占用過多空間)
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +30 -exec rm {} \;
chmod +x /usr/local/bin/backup_nodejs_logs.sh。crontab -e),添加以下內容(如每天凌晨2點執行):0 2 * * * /usr/local/bin/backup_nodejs_logs.sh >> /path/to/backup/logs/backup.log 2>&1
此配置會將備份過程的輸出(包括錯誤信息)重定向到/path/to/backup/logs/backup.log,便于后續排查問題。若使用PM2進程管理器運行Node.js應用,PM2自帶日志管理功能,可通過pm2-logrotate模塊實現自動化備份。
配置步驟:
pm2 install pm2-logrotate。pm2 set pm2-logrotate:<key> <value>設置(示例):pm2 set pm2-logrotate:max_size 10M # 單個日志文件超過10MB時輪轉
pm2 set pm2-logrotate:retain 7 # 保留最近7個備份
pm2 set pm2-logrotate:compress true # 壓縮舊日志
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss # 備份文件名格式
~/.pm2/logs/目錄下,輪轉后的備份會自動保留。若需要將日志備份到異地服務器(如云存儲),可使用rsync命令結合cron定時任務實現。
操作步驟:
ssh-keygen -t rsa # 本地生成密鑰對
ssh-copy-id user@remote-server # 將公鑰復制到遠程服務器
crontab -e):0 3 * * * rsync -avz --delete /path/to/your/nodejs/app/logs/ user@remote-server:/backup/nodejs_logs/
此配置會每天凌晨3點將本地日志目錄同步到遠程服務器的/backup/nodejs_logs/目錄,--delete參數會刪除遠程服務器上已不存在的本地文件(保持同步)。