ubuntu

如何设置Ubuntu日志自动备份

小樊
45
2025-10-03 03:56:09
栏目: 智能运维

使用logrotate工具(Ubuntu系统自带,推荐方案)
logrotate是Ubuntu管理日志轮转、压缩和删除的标准工具,无需额外安装,配置灵活且自动化程度高。

  1. 创建自定义配置文件:在/etc/logrotate.d/目录下新建配置文件(如mylogs),添加以下内容(以/var/log/*.log为例,覆盖所有普通日志文件):
    /var/log/*.log {
        daily                # 每天轮转一次(可选:weekly/monthly)
        rotate 7             # 保留最近7个备份文件
        compress             # 使用gzip压缩旧日志(节省空间)
        delaycompress        # 延迟压缩(如第7个备份不压缩,等待下次轮转再处理)
        missingok            # 若日志文件不存在,不报错
        notifempty           # 若日志为空,不进行轮转
        create 640 root adm  # 轮转后创建新日志文件,权限640,属主root,属组adm
        sharedscripts        # 所有日志处理完毕后,统一执行postrotate脚本
        postrotate
            /usr/lib/rsyslog/rsyslog-rotate  # 通知rsyslog重新打开日志文件(避免日志丢失)
        endscript
    }
    
  2. 测试配置有效性:运行以下命令强制立即执行轮转(不修改原配置),检查备份文件是否生成:
    sudo logrotate -f /etc/logrotate.d/mylogs
    
  3. 自动执行机制:logrotate默认通过/etc/cron.daily/logrotate每日自动运行,无需额外设置定时任务。

使用rsync命令+cron定时任务(适合增量备份)
若需将日志同步到远程服务器或另一存储目录(保留完整文件而非压缩包),可使用rsync的增量备份功能,配合cron实现定时。

  1. 安装rsync(若未安装)
    sudo apt update && sudo apt install rsync
    
  2. 创建备份目录
    sudo mkdir -p /backup/logs  # 本地备份目录(可替换为远程路径,如user@remote:/backup/logs)
    
  3. 编写rsync备份命令
    rsync -av --delete /var/log/ /backup/logs/  # -a保留文件属性,-v显示详情,--delete删除目标目录中源目录不存在的文件(保持同步)
    
  4. 设置cron定时任务
    编辑当前用户的crontab(crontab -e),添加以下行(每天凌晨2点执行):
    0 2 * * * rsync -av --delete /var/log/ /backup/logs/
    
    保存后,cron会自动加载任务。

使用tar命令+cron定时任务(适合打包压缩备份)
若需将日志打包为单个压缩文件(节省存储空间),可使用tar命令,配合cron实现定时。

  1. 创建备份脚本:新建/usr/local/bin/backup_logs.sh,内容如下:
    #!/bin/bash
    BACKUP_DIR="/backup/logs"  # 备份目录
    DATE=$(date +"%Y%m%d_%H%M%S")  # 当前时间(用于文件名)
    mkdir -p "$BACKUP_DIR"  # 创建备份目录(若不存在)
    tar -czvf "$BACKUP_DIR/syslog_$DATE.tar.gz" /var/log/syslog  # 打包并压缩syslog(可替换为/var/log/*.log备份所有日志)
    find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -exec rm {} \;  # 删除7天前的备份(保留最近7天)
    
  2. 赋予脚本执行权限
    sudo chmod +x /usr/local/bin/backup_logs.sh
    
  3. 设置cron定时任务
    编辑crontab(crontab -e),添加以下行(每天凌晨1点执行):
    0 1 * * * /usr/local/bin/backup_logs.sh
    
    保存后,cron会自动运行脚本。

0
看了该问题的人还看了