Ubuntu环境下Node.js日志备份的常用方法
logrotate是Ubuntu系统自带的日志管理工具,可自动实现日志轮转、压缩、删除旧日志及重启日志服务,非常适合Node.js应用的日常日志备份。
sudo apt update && sudo apt install logrotate
/etc/logrotate.d/目录下新建配置文件(如nodejs_app),内容根据实际日志路径调整(以下为示例):/path/to/your/nodejs/app/logs/*.log {
daily # 每天轮转一次
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(如.gz格式)
delaycompress # 延迟压缩(避免当天日志被立即压缩)
missingok # 若日志文件不存在,不报错
notifempty # 若日志为空,不轮转
create 0640 root root # 创建新日志文件的权限和所有者
sharedscripts # 所有日志处理完成后统一执行postrotate
postrotate
/bin/kill -HUP $(cat /var/run/your_app.pid 2>/dev/null) 2>/dev/null || true # 重启应用(需替换为实际PID文件路径)
endscript
}
sudo logrotate -vf /etc/logrotate.d/nodejs_app
/etc/cron.daily/logrotate)每日自动执行,无需额外配置。通过编写Shell脚本实现日志打包、清理,并用cron定时执行,适合需要自定义备份逻辑的场景。
/path/to/backup_logs.sh):#!/bin/bash
LOG_DIR="/path/to/your/nodejs/logs" # 日志源目录
BACKUP_DIR="/path/to/backup/logs" # 备份目标目录
DATE=$(date +"%Y%m%d%H%M%S") # 当前时间戳(用于文件名)
# 创建备份目录(若不存在)
mkdir -p "$BACKUP_DIR"
# 打包日志文件(保留目录结构)
tar -czf "${BACKUP_DIR}/logs_backup_${DATE}.tar.gz" -C "$LOG_DIR" .
# 删除超过30天的旧备份(避免磁盘空间耗尽)
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +30 -exec rm {} \;
chmod +x /path/to/backup_logs.sh
crontab -e),添加以下行(例如每天凌晨2点执行):0 2 * * * /path/to/backup_logs.sh >> /path/to/backup/logs/backup.log 2>&1 # 输出日志到指定文件
此配置会每天自动备份日志,并将执行结果记录到backup.log中。rsync可实现日志文件的增量备份(仅传输变化的文件),适合需要将日志同步到远程服务器或另一存储设备的场景。
rsync -av --delete /path/to/your/nodejs/logs/ /path/to/backup/logs/
参数说明:-a(归档模式,保留权限、时间戳等)、-v(详细输出)、--delete(删除目标目录中源目录不存在的文件,保持严格同步)。rsync -avz -e ssh /path/to/your/nodejs/logs/ user@remote-server:/path/to/remote/logs/backup/
参数说明:-z(压缩传输)、-e ssh(通过SSH加密传输),需替换user(远程用户名)、remote-server(远程服务器IP/域名)及目标路径。tar命令适合临时或手动备份,可将日志目录打包为压缩文件,便于存储或转移。
tar -czvf /path/to/backup/logs_backup_$(date +"%Y%m%d").tar.gz -C /path/to/your/nodejs/logs .
参数说明:-c(创建新归档)、-z(gzip压缩)、-v(详细输出)、-f(指定输出文件名)、-C(切换到指定目录后再打包)。/var/log/nodejs/app/目录下的所有日志打包为logs_backup_20250930.tar.gz,存放到/mnt/backup/目录。