日志位置取决于同步工具:rsync需手动重定向,systemd timer任务日志用journalctl查看,syncthing/lftp需开启debug日志。

同步任务失败后,日志在哪?先确认你用的是哪个同步工具
Linux 下没有统一的“文件同步任务”服务,rsync、lftp、unison、syncthing 或 systemd timer 封装的脚本,日志位置和重试机制完全不同。盲目查 /var/log/messages 很可能一无所获。
常见情况:
-
rsync本身不重试——靠外层脚本或 cron + 退出码判断重试,日志全靠你手动重定向 -
systemd timer触发的同步任务,失败重试由OnFailure=或RestartSec=控制,日志走 journalctl -
syncthing自带 Web UI 和~/.config/syncthing/logs/,但默认不记录重试细节,需开启 debug 日志
查 systemd 定时同步任务的重试日志:用 journalctl 过滤 unit 和 exit code
如果你用 systemctl enable my-sync.timer 启动同步,失败重试行为由 service unit 定义(比如 Restart=on-failure),日志全在 journal 里,不是 /var/log/ 下的文本文件。
执行以下命令定位真实失败点:
-
journalctl -u my-sync.service --since "1 hour ago" -n 100—— 查最近 100 行该服务日志 -
journalctl -u my-sync.service | grep -E "(Failed|exit code|signal|timeout)"—— 抓失败关键词 -
journalctl -u my-sync.service -o json | jq 'select(.CODE != null)'—— 如果启用了LogLevelMax=debug,可看到完整 exit code 和 stderr
注意:RestartSec= 设置的等待秒数不会记入日志,但两次启动时间差能反推是否真重试了。
rsync 脚本被 cron 调用时,重试逻辑和日志必须自己写
rsync 命令本身无重试参数(--contimeout 只控制单次连接超时),所谓“自动重试”全是靠外层 shell 脚本实现的。日志也完全依赖你是否重定向了 2>&1。
典型错误写法:0 2 * * * rsync -av /src/ user@host:/dst/ —— 失败无声,无重试,无日志。
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
正确做法示例(含重试+日志):
#!/bin/bash
MAX_RETRY=3
for i in $(seq 1 $MAX_RETRY); do
if rsync -av --timeout=300 /src/ user@host:/dst/ >> /var/log/rsync-backup.log 2>&1; then
echo "$(date): success on try $i" >> /var/log/rsync-backup.log
exit 0
else
echo "$(date): failed on try $i, retrying..." >> /var/log/rsync-backup.log
sleep 30
fi
done
echo "$(date): gave up after $MAX_RETRY tries" >> /var/log/rsync-backup.log
关键点:
- 必须显式重定向
>> /var/log/rsync-backup.log 2>&1,否则 cron 默认发邮件,而多数服务器没配 mail 服务 - 重试间隔
sleep 30要足够长,避免触发对方 SSH 的 rate limit - 日志路径需确保 cron 运行用户有写权限:
sudo chown root:adm /var/log/rsync-backup.log
syncthing 或 lftp 等工具的重试日志,得开 debug 级别才看得见
这些工具默认只记同步完成事件,失败重试细节藏在 debug 日志里,不开就等于没日志。
例如 syncthing:
- 启动时加
-log-level=debug,或在 GUI → Settings → Advanced → Log Level 设为debug - 日志实际写入
~/.config/syncthing/logs/,不是系统日志目录 - 重试行为体现在
puller (folder-id): retrying in Xs这类行中,普通info级别直接过滤掉了
再如 lftp:
- 必须用
set log:enabled true+set log:file /path/to/lftp.log才生成日志 - 重试提示类似
lftp: retrying mirror ... (attempt 2),但仅当set net:max-retries 3生效时才出现 - 不设
log:enabled,哪怕失败也静默退出,$?是 1,但无任何线索
真正麻烦的不是查日志,而是很多同步工具默认把重试过程当作“内部行为”不落盘——你得主动打开开关,否则它根本没记。










