Node.js在Ubuntu上的日志备份方案
导读:Node.js在Ubuntu上的日志备份方案 1. 使用logrotate(系统自带工具,推荐) logrotate是Ubuntu系统默认的日志管理工具,可自动实现日志的轮转、压缩、删除及通知,完美适配Node.js应用日志管理需求。 安...
Node.js在Ubuntu上的日志备份方案
1. 使用logrotate(系统自带工具,推荐)
logrotate是Ubuntu系统默认的日志管理工具,可自动实现日志的轮转、压缩、删除及通知,完美适配Node.js应用日志管理需求。
- 安装logrotate:若未安装,通过终端执行
sudo apt install logrotate完成安装。 - 配置logrotate:在
/etc/logrotate.d/目录下创建专属配置文件(如nodejs-app),添加以下内容(需根据实际日志路径调整):/path/to/your/nodejs/app/logs/*.log { daily # 每天轮转日志 rotate 7 # 保留最近7天的日志 compress # 压缩旧日志(节省空间) missingok # 若日志文件不存在,不报错 notifempty # 若日志为空,不轮转 create 0640 root adm # 新日志文件的权限与所有者 sharedscripts # 所有日志处理完成后统一执行脚本 postrotate # 轮转后执行的命令(重启Node.js进程以应用新日志) /usr/sbin/killall -HUP node 2> /dev/null || true endscript } - 测试与激活配置:执行
sudo logrotate -d /etc/logrotate.d/nodejs-app测试配置语法(无错误则继续);若需立即执行,用sudo logrotate -f /etc/logrotate.d/nodejs-app强制运行。
logrotate会随系统cron自动执行(通常每天凌晨),无需额外配置定时任务。
2. 使用rsync同步到远程服务器
若需异地备份(如云端或另一台服务器),可通过rsync实现增量同步,确保日志安全。
- 安装rsync:终端执行
sudo apt install rsync安装。 - 创建备份脚本:新建
backup_nodejs_logs.sh,内容如下(替换为实际路径):#!/bin/bash LOG_DIR="/path/to/your/nodejs/app/logs" # 源日志目录 BACKUP_DIR="user@remote-server:/path/to/backup/logs" # 远程备份目录(需提前配置SSH免密) rsync -avz --delete "$LOG_DIR/" "$BACKUP_DIR" # 同步日志(--delete删除远程多余文件) echo "$(date '+%Y-%m-%d %H:%M:%S') Backup completed." > > /var/log/backup.log # 记录备份日志 - 赋予执行权限:
chmod +x backup_nodejs_logs.sh。 - 设置定时任务:通过
crontab -e添加以下内容(如每天凌晨2点执行):0 2 * * * /path/to/backup_nodejs_logs.sh
rsync仅传输变化部分,效率高,适合大量日志文件的远程备份。
3. 使用tar打包压缩备份
适合需要将日志归档为单个文件的场景,便于存储或转移。
- 创建备份脚本:新建
backup_nodejs_logs_tar.sh,内容如下:#!/bin/bash LOG_DIR="/path/to/your/nodejs/app/logs" # 源日志目录 BACKUP_DIR="/path/to/backup/logs" # 本地备份目录 DATE=$(date +%Y%m%d_%H%M%S) # 当前日期时间(用于文件名) mkdir -p "$BACKUP_DIR/$DATE" # 创建日期子目录 tar -czf "$BACKUP_DIR/$DATE/nodejs_logs_$DATE.tar.gz" -C "$LOG_DIR" . # 打包压缩日志 find "$BACKUP_DIR" -type d -mtime +30 -exec rm -rf { } \; # 删除30天前的备份(保留30天) - 赋予执行权限:
chmod +x backup_nodejs_logs_tar.sh。 - 设置定时任务:通过
crontab -e添加以下内容(如每天凌晨1点执行):0 1 * * * /path/to/backup_nodejs_logs_tar.sh
此方法生成的.tar.gz文件便于长期存储,且通过find命令自动清理旧备份,节省磁盘空间。
4. 结合pm2的日志管理(适用于pm2运行的应用)
若使用pm2管理Node.js进程,可直接利用pm2的内置日志切割功能,简化配置。
- 设置pm2日志切割:终端执行以下命令(调整参数以满足需求):
pm2 set pm2-logrotate:max_size 1G # 单个日志文件最大1GB pm2 set pm2-logrotate:retain 30 # 保留最近30个日志文件 pm2 set pm2-logrotate:compress true # 压缩旧日志 - 重启pm2应用:
pm2 restart app_name使配置生效。
pm2会自动处理日志切割,无需额外编写脚本,适合使用pm2管理的应用。
5. 使用Shell脚本+定时任务(自定义灵活方案)
若需更复杂的备份逻辑(如备份到多个位置、发送邮件通知),可编写自定义Shell脚本。
- 创建备份脚本:新建
advanced_backup.sh,内容如下:#!/bin/bash LOG_DIR="/path/to/your/nodejs/app/logs" LOCAL_BACKUP="/path/to/local/backup" REMOTE_BACKUP="user@remote-server:/path/to/remote/backup" DATE=$(date +%Y%m%d) # 本地备份(压缩) mkdir -p "$LOCAL_BACKUP/$DATE" cp -r "$LOG_DIR"/* "$LOCAL_BACKUP/$DATE" tar -czf "$LOCAL_BACKUP/$DATE/nodejs_logs_$DATE.tar.gz" -C "$LOCAL_BACKUP/$DATE" . rm -rf "$LOCAL_BACKUP/$DATE" # 删除解压后的原始日志 # 远程备份(rsync) rsync -avz "$LOCAL_BACKUP/$DATE" "$REMOTE_BACKUP" # 发送邮件通知(需配置mailutils) echo "Node.js logs backup completed on $DATE" | mail -s "Backup Notification" your_email@example.com - 赋予执行权限:
chmod +x advanced_backup.sh。 - 设置定时任务:通过
crontab -e添加以下内容(如每天23:59执行):59 23 * * * /path/to/advanced_backup.sh
此方案可根据需求扩展(如添加加密、上传到云存储),灵活性最高。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Node.js在Ubuntu上的日志备份方案
本文地址: https://pptw.com/jishu/737251.html
