Spaces:
Running
Running
import config from './config.js'; | |
import { fileURLToPath } from 'url'; | |
import path from 'path'; | |
import { checkCookieFile, getHumanReadableTimestamp, log, logError } from './utils/common-utils.js'; | |
import { createBrowserSession, navigateToWebIDE, executeCommandFlow } from './utils/webide-utils.js'; | |
// 执行单次命令的函数 | |
async function executeCommandOnce(page) { | |
log(`[${getHumanReadableTimestamp()}] 开始执行命令...`); | |
return executeCommandFlow(page, 'scheduler'); | |
} | |
// 主调度器函数 | |
async function startScheduler() { | |
// 检查cookie文件是否存在 | |
if (!checkCookieFile(config.cookieFile)) { | |
return; | |
} | |
log(`[${getHumanReadableTimestamp()}] 启动调度器...`); | |
const intervalSeconds = Math.round(config.schedulerInterval / 1000); | |
log(`调度器将每${intervalSeconds}秒执行一次命令以防止编辑器休眠`); | |
let browser; | |
try { | |
// 创建浏览器会话 | |
const { browser: browserInstance, page } = await createBrowserSession(config.cookieFile); | |
browser = browserInstance; | |
// 导航到WebIDE页面 | |
await navigateToWebIDE(page); | |
// 立即执行一次命令 | |
await executeCommandOnce(page); | |
// 设置定时器,按配置的时间间隔执行 | |
const intervalId = setInterval(async () => { | |
try { | |
// 重新导航到页面以确保页面活跃 | |
log(`[${getHumanReadableTimestamp()}] 重新导航到WebIDE页面...`); | |
await navigateToWebIDE(page); | |
// 执行命令 | |
await executeCommandOnce(page); | |
} catch (error) { | |
logError(`[${getHumanReadableTimestamp()}] 定时任务执行失败:`, error); | |
} | |
}, config.schedulerInterval); | |
log(`[${getHumanReadableTimestamp()}] 调度器已启动,将每${intervalSeconds}秒执行一次命令`); | |
log('按 Ctrl+C 停止调度器'); | |
// 监听进程退出信号 | |
process.on('SIGINT', async () => { | |
log(`\n[${getHumanReadableTimestamp()}] 收到停止信号,正在关闭调度器...`); | |
clearInterval(intervalId); | |
if (browser) { | |
await browser.close(); | |
} | |
log('调度器已停止,浏览器已关闭'); | |
process.exit(0); | |
}); | |
// 保持进程运行 | |
process.on('SIGTERM', async () => { | |
log(`\n[${getHumanReadableTimestamp()}] 收到终止信号,正在关闭调度器...`); | |
clearInterval(intervalId); | |
if (browser) { | |
await browser.close(); | |
} | |
log('调度器已停止,浏览器已关闭'); | |
process.exit(0); | |
}); | |
} catch (error) { | |
logError(`[${getHumanReadableTimestamp()}] 调度器启动失败:`, error); | |
if (browser) { | |
await browser.close(); | |
} | |
} | |
} | |
// 运行调度器 | |
const __filename = fileURLToPath(import.meta.url); | |
const scriptPath = path.resolve(process.argv[1]); | |
if (path.resolve(__filename) === scriptPath) { | |
startScheduler().catch(console.error); | |
} | |
export { startScheduler }; | |