rsync 本身不内置日志持久化功能,但可通过 -v 和 --itemize-changes 配合重定向将详细变更记录到文件;启用 rsyncd 时可在 /etc/rsyncd.conf 中配置 log file 实现服务端日志;脚本中可封装时间戳、--stats 汇总及 logrotate 轮转。

rsync 本身不内置日志持久化功能,但可通过组合标准选项与 shell 重定向,把每次同步的详细变更信息完整记录到文件中,便于事后审计或排查问题。
用 -v + --itemize-changes 配合重定向生成结构化日志
这是最直接、最常用的方式。-v 显示基础过程,--itemize-changes(简写 -i)会为每个处理的文件输出一行符号标记,清晰说明是新增、修改、删除还是跳过:
- > 表示新文件被传输(added)
- c 表示内容变更(checksum mismatch,需重传)
- . 表示文件未变,仅同步元数据(如时间戳、权限)
- * 表示目标端有但源端无,且启用了 --delete,则会被删除
命令示例:
rsync -av --itemize-changes --delete /src/ /dst/ > /var/log/rsync-$(date +%Y%m%d).log 2>&1
注意:2>&1 把 stderr(含警告、错误)也合并进日志,避免遗漏关键信息。
启用 rsyncd 守护进程时配置服务端日志
若通过 rsync daemon(rsync://)方式同步,可在 /etc/rsyncd.conf 中开启服务端日志:
- 添加 log file = /var/log/rsyncd.log
- 可选加 log format = %t %a %m %f %l 自定义字段(时间、客户端IP、模块名、文件名、大小)
- 重启服务:sudo systemctl restart rsync 或 sudo rsync --daemon
该日志记录所有连接、认证、传输行为,适合集中管理多客户端场景。
在脚本中封装带时间戳和摘要的日志逻辑
自动化备份时,建议用 shell 脚本统一管理日志路径与内容,例如:
LOGFILE="/var/log/rsync-backup-$(date +\%Y\%m\%d).log"
echo "=== $(date) ===" >> "$LOGFILE"
rsync -av --itemize-changes --delete --stats /home/user/docs/ /backup/docs/ >> "$LOGFILE" 2>&1
echo "" >> "$LOGFILE"
其中 --stats 会在结尾输出汇总信息(如共传输多少文件、跳过多少、总字节数),方便快速核对执行效果。
配合 logrotate 实现日志自动轮转
长期运行会产生大量日志,建议用系统级工具控制体积:
- 新建 /etc/logrotate.d/rsync
- 内容示例:
/var/log/rsync-*.log {
daily
missingok
rotate 30
compress
delaycompress
}
这样每天归档、保留30天、自动压缩,既留痕又不占空间。

















