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参数会删除远程服务器上已不存在的本地文件(保持同步)。