diff --git a/src/services/api-server.js b/src/services/api-server.js index bf3e66f..6ad8921 100644 --- a/src/services/api-server.js +++ b/src/services/api-server.js @@ -366,6 +366,18 @@ async function startServer() { if (scheduledConfig?.enabled) { const interval = scheduledConfig.interval || CONFIG.CRON_NEAR_MINUTES * 60 * 1000; + // 启动时运行健康检查 + if (scheduledConfig.startupRun !== false) { + logger.info('[ScheduledHealthCheck] Running scheduled health check on startup...'); + setTimeout(async () => { + try { + await poolManager.performScheduledHealthChecks(); + } catch (error) { + logger.error('[ScheduledHealthCheck] Startup run error:', error); + } + }, 100); // 延迟100ms确保服务已完全就绪 + } + // 设置定时任务 setInterval(async () => { try { diff --git a/static/app/config-manager.js b/static/app/config-manager.js index e4b08ab..712cdc0 100644 --- a/static/app/config-manager.js +++ b/static/app/config-manager.js @@ -251,9 +251,11 @@ async function loadConfiguration() { if (scheduledHealthCheckIntervalEl) scheduledHealthCheckIntervalEl.value = 600000; } - // 定时健康检查间隔快捷按钮 + // 定时健康检查间隔快捷按钮(防止重复绑定) const intervalQuickBtns = document.querySelectorAll('#scheduledHealthCheckInterval + .quick-select-btns button'); intervalQuickBtns.forEach(btn => { + if (btn.dataset.listenerAttached) return; // 防止重复绑定 + btn.dataset.listenerAttached = 'true'; btn.addEventListener('click', (e) => { e.preventDefault(); const value = parseInt(btn.getAttribute('data-value'));