rsync 日志记录 + logrotate 轮转
【摘要】 一、rsync 日志记录 1. 背景rsync 默认不写日志文件,只在终端输出。需要留存记录时有两种方式。 2. 方式一:--log-file(推荐,规范)rsync -av --delete --log-file=/var/log/rsync_push.log \ /data/mirror/ root@host:/data/mirror/每条记录带 时间戳 + 进程 PID,可对应到每...
一、rsync 日志记录
1. 背景
rsync 默认不写日志文件,只在终端输出。需要留存记录时有两种方式。
2. 方式一:--log-file(推荐,规范)
rsync -av --delete --log-file=/var/log/rsync_push.log \
/data/mirror/ root@host:/data/mirror/
每条记录带 时间戳 + 进程 PID,可对应到每次推送调用。
自定义格式:
rsync -av --log-file=/var/log/rsync_push.log \
--log-file-format='%t %o %i %b %n' \
/data/mirror/ root@host:/data/mirror/
常用占位符:
| 占位符 | 含义 |
|---|---|
%t |
时间 |
%o |
操作类型(send/deliver) |
%i |
变更类型(新增/更新/删除) |
%n |
文件名 |
%b |
传输字节数 |
%f |
完整路径 |
%a |
对端 IP |
%p |
PID |
3. 方式二:输出重定向(简单)
rsync -av --delete /data/mirror/ root@host:/data/mirror/ \
>> /var/log/rsync_push_$(date +%F).log 2>&1
- 按日期自动分文件,历史清晰
- 缺点:无时间戳,只有 rsync 原始输出
4. 记录同步账号(审计关键)
只有接收端(rsyncd 守护进程)能直接记账号,发起端记不了。
接收端 /etc/rsyncd.conf:
log file = /var/log/rsyncd.log
transfer logging = yes
log format = %t %a %u %o %n
%u= 认证用户名,%a= 对端 IP- 可按账号审计谁推了什么模块
- 仅对走 rsyncd(
rsync://host::module认证方式)生效
发起端 --log-file 不记账号,需脚本手动补一行:
ACC="cnp"; DEST="/data/mirror/"
rsync -av --log-file=/var/log/rsync_push.log /data/mirror/ ${ACC}@host:${DEST}/
echo "$(date '+%F %T') account=${ACC} dest=${DEST}" >> /var/log/rsync_push.log
二、logrotate 日志轮转
1. 核心区别:两种日志场景
| 场景 | 配置要点 |
|---|---|
一次性进程日志(--log-file 推送端) |
普通配置即可,无进程占用问题 |
| 常驻守护进程日志(rsyncd) | 必须加 copytruncate(先复制再清空,进程不换句柄、不用重启) |
2. 指令速查
| 指令 | 作用 |
|---|---|
daily / weekly / monthly / yearly |
轮转频率(无半年/一年粒度) |
rotate N |
保留最近 N 份,超出删最旧 |
compress |
旧日志压缩成 .gz |
delaycompress |
本轮刚切出的先不压,下次轮转再压(配合 copytruncate) |
missingok |
日志不存在不报错 |
notifempty |
空日志不轮转 |
copytruncate |
先复制再清空原文件,守护进程不用重启 |
dateext |
轮转文件带日期后缀(如 rsyncd.log-20260904) |
3. 重要:不写 rotate 会怎样?
不写 rotate 默认值为 0,轮转后旧日志直接删除,不会一直保存。
- 想要保留 → 写
rotate N - 想长期保存 →
rotate 9999(磁盘会涨,配合 compress)
4. 保留周期换算(无半年/一年粒度)
| 需求 | 配置 |
|---|---|
| 半年(按周切) | weekly + rotate 26 |
| 半年(按月切) | monthly + rotate 6 |
| 一年 | weekly + rotate 52 |
| 两年 | yearly + rotate 2(每年切一次) |
5. 完整配置示例(rsyncd 守护进程日志,每周轮转保留半年)
/var/log/rsyncd.log {
weekly
rotate 26
compress
delaycompress
missingok
notifempty
copytruncate
dateext
}
若推送端 /var/log/rsync_push.log 也要轮,写在一起:
/var/log/rsync_push.log /var/log/rsyncd.log {
weekly
rotate 26
compress
delaycompress
missingok
notifempty
copytruncate
dateext
}
6. 部署流程
# 1. 创建配置
vim /etc/logrotate.d/rsync
# 2. 语法检查(不实际执行)
logrotate -d /etc/logrotate.d/rsync
# 3. 强制轮转验证
logrotate -f /etc/logrotate.d/rsync
# 4. 查看结果
ls -lh /var/log/rsync*log*
- 系统 cron 每天自动跑(
/etc/cron.daily/logrotate),无需自建 crontab - 验证时看到
rsyncd.log-20260904之类的文件即成功
三、常见误区
- ❌ 不写 rotate = 一直保存 → ✅ 默认 rotate 0,轮转即删
- ❌ 守护进程日志用普通配置 → ✅ 必须 copytruncate,否则日志写入已改名的旧文件
- ❌ logrotate 支持半年粒度 → 只有 daily/weekly/monthly/yearly
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)