rsync 本身不自动重试,失败日志中无重试记录;重试需外部封装,systemd 日志用 journalctl -u 查,cron 封装则查 /var/log/syslog 或 /var/log/messages,自建脚本须主动打日志才能追踪重试次数。

rsync 同步失败时日志里根本没重试记录
rsync 本身不自动重试 —— 它执行完就退出,成功或失败都只记一次。所谓“自动重试”必须靠外部封装(比如 shell 循环、systemd 服务、cron + 脚本),日志源头取决于你用哪种方式启动同步。直接跑 rsync 命令却指望它自己重试,日志里自然只有单次失败,不会有“第2次重试”“第3次重试”这类条目。
查 systemd 封装的 rsync 重试日志用 journalctl -u
如果你把 rsync 写成 systemd service,并配了 Restart=on-failure 和 RestartSec=10,那每次重试都会作为新进程启动,journalctl 能完整捕获全部尝试:
-
journalctl -u my-rsync-sync.service查全部日志 -
journalctl -u my-rsync-sync.service --since "1 hour ago"缩小时间范围 -
journalctl -u my-rsync-sync.service -n 50看最近50行,含失败和重试痕迹 - 失败时通常带
exit code或rsync error:,重试前会有Started行,注意时间戳间隔是否匹配RestartSec
查 cron 封装的重试日志得盯 /var/log/syslog 或 /var/log/messages
cron 不自己记重试过程,它只负责按时触发命令;真正重试逻辑在脚本里(比如 while 循环或 until 成功)。这类日志分散在系统级日志中:
-
grep "my-rsync-script.sh" /var/log/syslog找脚本执行痕迹 -
grep "rsync.*error\|rsync.*failed" /var/log/syslog | tail -20快速定位失败点 - 如果脚本里用了
set -x或手动echo "$(date): retry #1",这些输出也会进 syslog - 注意:/var/log/syslog 在 RHEL/CentOS 系叫
/var/log/messages,内容结构一致但路径不同
自建重试脚本必须主动打日志,否则无迹可寻
写 while 循环重试 rsync 时,不加 echo 或 logger,日志里就只剩 rsync 自己那行错误,根本分不清是第几次失败:
- 错例:
while ! rsync -avz src/ dst/; do sleep 5; done→ 日志只有 rsync 错误,无重试标识 - 对例:
i=0; while ! rsync -avz src/ dst/; do ((i++)); logger "rsync retry #$i failed at $(date)"; sleep 5; done - 更稳妥做法:把每次 rsync 输出重定向到独立文件,如
rsync ... 2>&1 >> /var/log/rsync-retry-$(date +%s).log - 别依赖
--log-file参数——它只记录 rsync 本次运行内容,不包含重试计数、sleep 等控制流信息


















