#915·go-admin

在同一数据库上运行第二个实例会导致作业调度程序出错

作者: wenjianzhang创建于 2026年9月7日更新于 2026年9月7日

**一个启用的作业每个实例执行一次。** 每个实例都在自己的调度程序中注册了整个“状态 = 2”的列表。没有锁和没有领导者选举,因此 N 个实例每个周期执行 N 次。 **用户界面中的“停止”操作报告成功,而作业仍在运行。** `SysJob.RemoveJob`(`app/jobs/service/sys_job.go:21`) 从数据库中读取 `entry_id` 并调用 `cron.Remove` 来对本地调度程序进行处理。`Cron.removeEntry` 通过 id 过滤入口列表并返回空( `cron.go:347`) - 来自另一个进程的 id 要么与任何内容不匹配,要么与错误的作业匹配。处理程序然后写入 `entry_id = 0` 并返回 200。该处理程序在 #890 中具有单独的报告缺陷;此处是其上游,并且在修复它之后仍然存在。

内容来源: go-admin-team/go-admin