Ubuntu上Node.js日志备份方法
导读:Ubuntu上Node.js日志备份的常见方法 1. 使用logrotate工具(系统级自动化轮转) logrotate是Ubuntu系统自带的日志管理工具,可自动完成Node.js日志的轮转、压缩、删除及保留策略配置。 安装logrot...
Ubuntu上Node.js日志备份的常见方法
1. 使用logrotate工具(系统级自动化轮转)
logrotate是Ubuntu系统自带的日志管理工具,可自动完成Node.js日志的轮转、压缩、删除及保留策略配置。
- 安装logrotate(若未安装):
sudo apt update & & sudo apt install logrotate
- 创建自定义配置文件:在
/etc/logrotate.d/
目录下新建文件(如nodejs_app
),内容示例如下(需替换为实际日志路径):/var/log/nodejs/*.log { daily # 每天轮转 rotate 7 # 保留最近7份日志 compress # 压缩旧日志(如.gz格式) missingok # 若日志文件不存在也不报错 notifempty # 若日志为空则不轮转 create 0640 root adm # 创建新日志文件并设置权限 sharedscripts # 所有日志处理完成后统一执行postrotate postrotate /bin/kill -HUP $(cat /var/run/nodejs.pid 2> /dev/null) 2> /dev/null || true # 重启Node.js进程以重新打开日志文件(需替换为实际PID文件路径) endscript }
- 手动测试配置:
sudo logrotate -vf /etc/logrotate.d/nodejs_app
(-v
显示详细过程,-f
强制立即轮转) - 自动运行:logrotate默认通过
/etc/cron.daily/logrotate
定时任务每天执行,无需额外配置。
2. 使用rsync命令(增量同步备份)
rsync是高效的文件同步工具,适合将Node.js日志同步到本地其他目录或远程服务器,支持增量备份(仅传输变化的部分)。
- 本地备份(同步到
/backup/logs
目录):
参数说明:rsync -av --delete /var/log/nodejs/ /backup/logs/
-a
(归档模式,保留文件属性)、-v
(详细输出)、--delete
(删除目标目录中源目录不存在的文件,保持一致性)。 - 远程备份(同步到远程服务器的
/remote/logs
目录):
参数说明:rsync -avz -e ssh /var/log/nodejs/ user@remote-server:/remote/logs/
-z
(压缩传输)、-e ssh
(通过SSH加密传输)。 - 自动化:将rsync命令写入shell脚本(如
sync_logs.sh
),并通过cron定时执行(如每天凌晨2点):
添加以下内容:crontab -e
0 2 * * * /path/to/sync_logs.sh
。
3. 使用tar命令(压缩打包备份)
tar命令可将Node.js日志打包成压缩文件(如.tar.gz),适合一次性完整备份。
- 备份命令(将
/var/log/nodejs/
目录下的所有.log文件打包到/backup/logs
):
参数说明:tar -czvf /backup/logs/logs_backup_$(date +%Y%m%d_%H%M%S).tar.gz -C /var/log/nodejs .
-c
(创建新压缩包)、-z
(gzip压缩)、-v
(详细输出)、-f
(指定文件名)、-C
(切换到指定目录)。 - 自动化:将上述命令写入shell脚本(如
backup_logs.sh
),并通过cron定时执行(如每周日凌晨3点):
添加以下内容:crontab -e
0 3 * * 0 /path/to/backup_logs.sh
。
4. 使用Node.js脚本(自定义备份逻辑)
通过Node.js编写脚本,可实现更灵活的备份逻辑(如按日期分割、上传到云存储),适合需要定制化需求的场景。
- 示例脚本(
backup-logs.js
):const fs = require('fs'); const path = require('path'); // 配置日志路径和备份目录 const logFilePath = '/var/log/nodejs/app.log'; const backupDir = '/backup/logs'; // 创建备份目录(若不存在) if (!fs.existsSync(backupDir)) { fs.mkdirSync(backupDir, { recursive: true } ); } // 生成带时间戳的备份文件名 const timestamp = new Date().toISOString().slice(0, 10); const destPath = path.join(backupDir, `app_${ timestamp} .log`); // 复制日志文件 const readStream = fs.createReadStream(logFilePath); const writeStream = fs.createWriteStream(destPath); readStream.on('error', (err) => console.error('读取日志失败:', err)); writeStream.on('error', (err) => console.error('写入备份失败:', err)); writeStream.on('finish', () => console.log('备份成功:', destPath)); readStream.pipe(writeStream);
- 定时执行:通过cron调用该脚本(如每天凌晨1点):
添加以下内容:crontab -e
0 1 * * * /usr/bin/node /path/to/backup-logs.js
。
5. 结合PM2管理(进程级日志备份)
若使用PM2管理Node.js应用,其日志默认存储在~/.pm2/logs/
目录下(格式为app-name-out.log
和app-name-err.log
),可通过以下方式备份:
- 备份PM2日志:使用rsync或tar命令备份
~/.pm2/logs/
目录,示例如下:rsync -av ~/.pm2/logs/ /backup/pm2_logs/
- 自动清理旧日志:通过PM2的
logs
命令清理旧日志(如保留最近7天的日志):
或编写脚本定期删除旧日志文件(如超过7天的文件):pm2 flush
find ~/.pm2/logs/ -type f -name "*.log" -mtime +7 -exec rm { } \;
- 自动化:将上述命令加入cron定时任务(如每天凌晨清理)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu上Node.js日志备份方法
本文地址: https://pptw.com/jishu/724013.html