温馨提示×

Ubuntu Node.js日志如何实现自动化备份

小樊
49
2025-09-26 20:12:31
栏目: 编程语言

Ubuntu下Node.js日志自动化备份的实现方法

1. 使用logrotate工具(系统原生推荐)

logrotate是Ubuntu系统自带的日志管理工具,可自动完成日志的轮转、压缩、删除及通知等操作,是Node.js日志自动化备份的首选方案。
配置步骤

  • 安装logrotate(若未安装):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
  • 自动运行:logrotate默认通过系统cron任务(/etc/cron.daily/logrotate)每日自动执行,无需额外配置。

2. 编写Shell脚本+定时任务(灵活定制)

若需要更个性化的备份逻辑(如备份到远程服务器、添加额外校验),可通过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
  • 设置cron定时任务:编辑当前用户的crontab(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,便于后续排查问题。

3. 结合PM2的日志管理(适用于PM2管理的应用)

若使用PM2进程管理器运行Node.js应用,PM2自带日志管理功能,可通过pm2-logrotate模块实现自动化备份。
配置步骤

  • 安装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会自动应用设置,日志文件默认存储在~/.pm2/logs/目录下,轮转后的备份会自动保留。

4. 使用rsync同步到远程服务器(异地容灾)

若需要将日志备份到异地服务器(如云存储),可使用rsync命令结合cron定时任务实现。
操作步骤

  • 确保远程服务器已配置SSH免密登录(避免每次输入密码):
    ssh-keygen -t rsa                  # 本地生成密钥对
    ssh-copy-id user@remote-server     # 将公钥复制到远程服务器
    
  • 创建cron定时任务(编辑crontab -e):
    0 3 * * * rsync -avz --delete /path/to/your/nodejs/app/logs/ user@remote-server:/backup/nodejs_logs/
    
    此配置会每天凌晨3点将本地日志目录同步到远程服务器的/backup/nodejs_logs/目录,--delete参数会删除远程服务器上已不存在的本地文件(保持同步)。

0