From 91bcf88df9fcb2cb75e4fa1a913509c90bae9b5f Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Tue, 1 Sep 2026 01:26:15 -0600 Subject: [PATCH] fix: use updateJob to replace repeatable schedule job on update in cloud MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #5233. Updating an enabled schedule (cron/timezone change) called schedule() (create-backup), which only adds a new repeatable job and never removes the one registered under the old cron pattern, leaving an orphaned BullMQ job running in Redis indefinitely. Switched to updateJob() (update-backup), which looks up the currently registered repeatable pattern, removes it, then re-adds — same pattern already used in backup.ts for backups. --- apps/dokploy/server/api/routers/schedule.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/dokploy/server/api/routers/schedule.ts b/apps/dokploy/server/api/routers/schedule.ts index d69760124..8629d7546 100644 --- a/apps/dokploy/server/api/routers/schedule.ts +++ b/apps/dokploy/server/api/routers/schedule.ts @@ -25,7 +25,7 @@ import { asc, desc, eq } from "drizzle-orm"; import { z } from "zod"; import { audit } from "@/server/api/utils/audit"; import { assertScheduledJobLimit } from "@/server/api/utils/plan-limits"; -import { removeJob, schedule } from "@/server/utils/backup"; +import { removeJob, schedule, updateJob } from "@/server/utils/backup"; import { createTRPCRouter, protectedProcedure } from "../trpc"; export const scheduleRouter = createTRPCRouter({ @@ -130,7 +130,7 @@ export const scheduleRouter = createTRPCRouter({ if (IS_CLOUD) { if (updatedSchedule?.enabled) { - schedule({ + await updateJob({ scheduleId: updatedSchedule.scheduleId, type: "schedule", cronSchedule: updatedSchedule.cronExpression,