Navicat 不支持任务失败自动发邮件,需通过命令行调用 + 外部脚本实现:先用 profile.xml 中的 UUID 任务 ID 执行 navicat.exe --run,再结合日志关键词(如 Error、failed)而非仅退出码判断失败,最后用 PowerShell Send-MailMessage 或 Bash mail 发送告警。
navicat 本身不支持任务失败后自动发邮件——它没有失败钩子、不维护失败状态、也不校验 smtp 投递结果。所谓“失败告警”,必须靠命令行调用 + 外部脚本捕获异常来实现。
navicat.exe --run 必须用任务 ID,不是任务名
界面里看到的任务名(如“备份订单库”)不能直接传给 --run。真实可用的 ID 存在配置文件中:
- Windows 路径:
%APPDATA%\PremiumSoft\Navicat\NavicatXX\profile.xml,搜索<task name="备份订单库">,取其id属性值 - macOS 路径:
~/Library/Application Support/PremiumSoft/Navicat/NavicatXX/profile.xml - ID 是 UUID 格式(如
8a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p),复制时别漏字符或空格
只靠退出码判断失败不可靠,建议加日志关键词匹配
navicat.exe --run 失败时通常返回非 0 退出码,但某些错误(如锁表超时、主从延迟跳过同步)可能仍返回 0。更稳妥的方式是结合日志内容判断:
- 任务属性 → 高级选项卡 → 勾选“保存运行日志到文件”,路径设为全英文无空格(如
C:\navicat_logs\backup_fail.log) - 脚本中用
Get-Content -Tail 20(PowerShell)或tail -n 20(Bash)读最后几十行 - 匹配关键词:
Error、failed、ORA-、SQLSTATE、1064等,比单纯看$LASTEXITCODE更准
邮件发送必须绕过 Navicat 自带通知,走系统级工具
Navicat 的“邮件通知”开关只对 Backup/Restore/Synchronize/Export 四类任务生效,且是异步触发、无失败反馈。真正可控的做法是:
- PowerShell 示例:
Send-MailMessage直连企业 SMTP,填-SmtpServer、-From、-To,正文可含$LASTEXITCODE或日志片段 - Bash 示例:用
mail或sendmail,需提前配好本地 MTA(如 msmtp) - 别依赖 Navicat 的“测试邮件”按钮——它只验证配置能否连接 SMTP,不模拟真实任务失败场景
真正容易被忽略的是:所有带“次数”“窗口”“重试”的逻辑(比如“连续失败3次才告警”)都得你用计数文件 + 文件锁自己实现,Navicat 自动运行任务永远是单次、无状态、无记忆的原子动作。


















