You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron项目中cron任务调度失效问题求助

解决Electron中Cron任务停止后无法恢复的问题

你的问题出在任务内部调用stop后,任务本身被终止,无法再触发后续的start逻辑。当用户进入游戏时,任务执行task.stop(),此时Cron任务会彻底停止运行,不再执行回调函数,所以返回网站后没有机会执行task.start()来恢复任务。

方案一:让Cron任务持续运行(推荐)

不需要启停任务,让任务每秒执行一次,每次执行时根据checkGameStatus()的结果输出对应内容。这种方式逻辑简单,避免了任务启停的管理问题:

let task = cron.schedule("* * * * * *", async () => {
    let isWebsite = await checkGameStatus();
    if (isWebsite) {
        console.log("In website");
    } else {
        console.log("In game");
        // ipcRenderer.send("trackgame", game, placeid)
    }
});

方案二:单独管理任务的启停(适用于必须停止任务的场景)

如果游戏状态下需要完全停止Cron任务,可以用一个独立的定时器来检查状态,根据状态启停Cron任务,避免在任务内部操作自身的启停:

// 初始化Cron任务,但不立即启动
let task = cron.schedule("* * * * * *", () => {
    console.log("In website");
    // 网站状态下的其他逻辑
}, { scheduled: false });

// 每秒检查一次状态,管理Cron任务的启停
setInterval(async () => {
    let isWebsite = await checkGameStatus();
    if (isWebsite) {
        // 只有任务未运行时才启动
        if (!task.running) {
            task.start();
        }
    } else {
        // 只有任务运行时才停止,并执行游戏相关逻辑
        if (task.running) {
            task.stop();
            console.log("In game");
            // ipcRenderer.send("trackgame", game, placeid)
        }
    }
}, 1000);

原代码失效原因

当执行task.stop()后,Cron任务会终止所有后续的定时执行,回调函数不会再被触发。此时即使用户回到网站,也没有机会执行回调里的task.start(),自然无法恢复任务。

内容的提问来源于stack exchange,提问作者user23206822

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:15:04