使用logrotate工具(Ubuntu系统自带,推荐方案)
logrotate是Ubuntu管理日志轮转、压缩和删除的标准工具,无需额外安装,配置灵活且自动化程度高。
/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
}
sudo logrotate -f /etc/logrotate.d/mylogs
/etc/cron.daily/logrotate
每日自动运行,无需额外设置定时任务。使用rsync命令+cron定时任务(适合增量备份)
若需将日志同步到远程服务器或另一存储目录(保留完整文件而非压缩包),可使用rsync的增量备份功能,配合cron实现定时。
sudo apt update && sudo apt install rsync
sudo mkdir -p /backup/logs # 本地备份目录(可替换为远程路径,如user@remote:/backup/logs)
rsync -av --delete /var/log/ /backup/logs/ # -a保留文件属性,-v显示详情,--delete删除目标目录中源目录不存在的文件(保持同步)
crontab -e
),添加以下行(每天凌晨2点执行):0 2 * * * rsync -av --delete /var/log/ /backup/logs/
保存后,cron会自动加载任务。使用tar命令+cron定时任务(适合打包压缩备份)
若需将日志打包为单个压缩文件(节省存储空间),可使用tar命令,配合cron实现定时。
/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天)
sudo chmod +x /usr/local/bin/backup_logs.sh
crontab -e
),添加以下行(每天凌晨1点执行):0 1 * * * /usr/local/bin/backup_logs.sh
保存后,cron会自动运行脚本。