navicat 自动任务不支持内置重试机制,失败仅返回非零退出码,无状态记录或分类错误;需通过外部脚本(如windows批处理/powershell或linux/macos shell)捕获退出码并手动实现带延迟的有限次重试。
navicat 自动运行任务不支持内置自动重试。你配置的任何「失败后重试」逻辑,都必须由外部调度器或脚本补全——不是漏配了某个开关,而是架构上就没这功能。
Navicat 任务失败时只返回退出码,没有重试状态
-
navicat.exe --run "task-id"执行完,要么返回0(成功),要么返回非0(失败),仅此而已 - 它不会记录失败次数、不会暂停后再试、也不会把错误类型分类(比如网络超时 vs 密码错误)
- 日志文件(如
profile.xml对应的 log)只存单次执行结果,不累积历史,无法靠它触发条件重试
所以,别在 Navicat 界面里找「重试次数」「间隔秒数」「失败后延迟」这类选项——根本不存在。
Windows 任务计划程序里加重试,要绕开三个坑
如果你用 taskschd.msc 调度 navicat.exe --run,想实现“失败后等5分钟再试一次”,得自己写逻辑,不能依赖任务计划的「重复」设置:
- ✅ 正确做法:在批处理脚本里判断退出码,失败则用
timeout /t 300等5分钟,再调一次navicat.exe --run - ❌ 错误做法:在任务计划里勾选「如果任务失败,每隔X分钟重试」——这个选项只对任务启动失败有效(比如路径错、权限不够),对
navicat.exe内部执行失败完全无效 - ⚠️ 注意并发:如果重试逻辑没加锁,又同时跑多个任务,可能多个实例同时读写同一个计数文件或日志,导致覆盖或误判
示例片段(PowerShell):
navicat.exe --run "backup_orders"
if ($LASTEXITCODE -ne 0) {
Start-Sleep -Seconds 300
navicat.exe --run "backup_orders"
}
Linux/macOS 下用 cron + shell 实现重试更可控
cron 本身也不管命令是否成功,但 shell 脚本能灵活控制:
- 用
$?捕获上一条命令退出码 - 失败时用
sleep 300延迟,再循环最多2次(避免无限卡死) - 建议把每次执行时间、退出码写进临时日志,方便排查是哪次失败
示例(bash):
#!/bin/bash
for i in {1..2}; do
"/Applications/Navicat Premium.app/Contents/MacOS/navicat" --run "sync_customers"
if [ $? -eq 0 ]; then exit 0; fi
sleep 300
done
echo "Failed after 2 retries at $(date)" >> /tmp/navicat_retry.log
真正容易被忽略的点是:重试不等于可靠。如果失败原因是数据库连接超时、目标表被锁、磁盘满,盲目重试只会让问题更隐蔽。先确认失败根因(查 Navicat 日志里的具体错误信息),再决定要不要重试、重试几次、间隔多长——这个判断,得你来写,Navicat 不代劳。











