温馨提示×

Ubuntu Node日志如何备份

小樊
54
2025-10-01 03:54:38
栏目: 智能运维

Ubuntu环境下Node.js日志备份的常用方法

1. 使用logrotate工具(系统级自动化推荐)

logrotate是Ubuntu系统自带的日志管理工具,可自动实现日志轮转、压缩、删除旧日志及重启日志服务,非常适合Node.js应用的日常日志备份。

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

2. 使用Shell脚本+定时任务(灵活定制)

通过编写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
    
  • 设置cron定时任务
    编辑当前用户的crontab(crontab -e),添加以下行(例如每天凌晨2点执行):
    0 2 * * * /path/to/backup_logs.sh >> /path/to/backup/logs/backup.log 2>&1 # 输出日志到指定文件
    
    此配置会每天自动备份日志,并将执行结果记录到backup.log中。

3. 使用rsync命令(增量同步)

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/域名)及目标路径。

4. 使用tar命令(一次性打包备份)

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/目录。

0