From f8628269b9a0860c5dddfad0b61d98c64d7ec70c Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Thu, 26 Feb 2026 21:04:16 -0600 Subject: [PATCH] refactor: improve error handling and logging in cron job setup for backups and log cleanup --- .../server/src/utils/access-log/handler.ts | 17 ++++-- packages/server/src/utils/backups/index.ts | 56 +++++++++++-------- 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/packages/server/src/utils/access-log/handler.ts b/packages/server/src/utils/access-log/handler.ts index 13a52c4b1..17b1c2543 100644 --- a/packages/server/src/utils/access-log/handler.ts +++ b/packages/server/src/utils/access-log/handler.ts @@ -1,3 +1,5 @@ +import fs from "node:fs"; +import path from "node:path"; import { paths } from "@dokploy/server/constants"; import { getWebServerSettings, @@ -12,8 +14,6 @@ export const startLogCleanup = async ( cronExpression = "0 0 * * *", ): Promise => { try { - const { DYNAMIC_TRAEFIK_PATH } = paths(); - const existingJob = scheduledJobs[LOG_CLEANUP_JOB_NAME]; if (existingJob) { existingJob.cancel(); @@ -21,10 +21,17 @@ export const startLogCleanup = async ( scheduleJob(LOG_CLEANUP_JOB_NAME, cronExpression, async () => { try { - await execAsync( - `tail -n 1000 ${DYNAMIC_TRAEFIK_PATH}/access.log > ${DYNAMIC_TRAEFIK_PATH}/access.log.tmp && mv ${DYNAMIC_TRAEFIK_PATH}/access.log.tmp ${DYNAMIC_TRAEFIK_PATH}/access.log`, - ); + const { DYNAMIC_TRAEFIK_PATH } = paths(); + const accessLogPath = path.join(DYNAMIC_TRAEFIK_PATH, "access.log"); + if (!fs.existsSync(accessLogPath)) { + console.error("Access log file does not exist"); + return; + } + + await execAsync( + `tail -n 1000 ${accessLogPath} > ${accessLogPath}.tmp && mv ${accessLogPath}.tmp ${accessLogPath}`, + ); await execAsync("docker exec dokploy-traefik kill -USR1 1"); } catch (error) { console.error("Error during log cleanup:", error); diff --git a/packages/server/src/utils/backups/index.ts b/packages/server/src/utils/backups/index.ts index 8da8f116a..cd88539d5 100644 --- a/packages/server/src/utils/backups/index.ts +++ b/packages/server/src/utils/backups/index.ts @@ -30,15 +30,19 @@ export const initCronJobs = async () => { const webServerSettings = await getWebServerSettings(); if (webServerSettings?.enableDockerCleanup) { - scheduleJob("docker-cleanup", CLEANUP_CRON_JOB, async () => { - console.log( - `Docker Cleanup ${new Date().toLocaleString()}] Running docker cleanup`, - ); + try { + scheduleJob("docker-cleanup", CLEANUP_CRON_JOB, async () => { + console.log( + `Docker Cleanup ${new Date().toLocaleString()}] Running docker cleanup`, + ); - await cleanupAll(); + await cleanupAll(); - await sendDockerCleanupNotifications(admin.user.id); - }); + await sendDockerCleanupNotifications(admin.user.id); + }); + } catch (error) { + console.error("[Backup] Docker Cleanup Error", error); + } } const servers = await getAllServers(); @@ -46,18 +50,22 @@ export const initCronJobs = async () => { for (const server of servers) { const { serverId, enableDockerCleanup, name } = server; if (enableDockerCleanup) { - scheduleJob(serverId, CLEANUP_CRON_JOB, async () => { - console.log( - `SERVER-BACKUP[${new Date().toLocaleString()}] Running Cleanup ${name}`, - ); + try { + scheduleJob(serverId, CLEANUP_CRON_JOB, async () => { + console.log( + `SERVER-BACKUP[${new Date().toLocaleString()}] Running Cleanup ${name}`, + ); - await cleanupAll(serverId); + await cleanupAll(serverId); - await sendDockerCleanupNotifications( - admin.user.id, - `Docker cleanup for Server ${name} (${serverId})`, - ); - }); + await sendDockerCleanupNotifications( + admin.user.id, + `Docker cleanup for Server ${name} (${serverId})`, + ); + }); + } catch (error) { + console.error(`[Backup] ${error}`); + } } } @@ -87,11 +95,15 @@ export const initCronJobs = async () => { } if (webServerSettings?.logCleanupCron) { - console.log( - "Starting log requests cleanup", - webServerSettings.logCleanupCron, - ); - await startLogCleanup(webServerSettings.logCleanupCron); + try { + console.log( + "Starting log requests cleanup", + webServerSettings.logCleanupCron, + ); + await startLogCleanup(webServerSettings.logCleanupCron); + } catch (error) { + console.error("[Backup] Log Cleanup Error", error); + } } };