簡體   English   中英

無法使用 node-cron 停止 cron 作業

[英]can't stop cron job using node-cron

目前我正在使用 node-cron package 來安排任務。 我可以讓任務運行,但我不能讓它停止。

我的 POST 正文是:

{
command: start/stop/destroy, 
}

代碼是:

export const schedule = async (req, res) => {
    const cmd = req.body.command
    const url_taskMap = {}

    // run every midnight GMT+7
    const task = await cron.schedule(process.env.SCHEDULE_TIME, () => {
        console.log('doing task');
    }, {
        scheduled: true,
        timezone: "Asia/Bangkok"
    })

    url_taskMap['url'] = task;
    let my_job = url_taskMap['url'];


    if (cmd === 'start') {
        my_job.start()
        res.status(200).send('Task started!')
    } else if (cmd === 'stop') {
        my_job.stop()
        res.status(200).send('Task stoped!')
    } else {
        my_job.destroy()
        res.status(200).send('Task destroyed!')
    }
}

我按照這里的答案https://stackoverflow.com/a/53684854/15088319但任務仍在運行。 我不知道如何讓它停下來。 你能幫助我嗎?

我對node-cron不是很熟悉,但看起來這段代碼有幾個問題,主要問題是每個請求都會創建一個新作業,這意味着,例如,第一個請求(cmd:' start') 開始一個作業,然后下一個請求 (cmd: 'stop') 創建另一個作業,然后停止另一個作業,而第一個作業將繼續運行...

為了克服這個問題,我們需要確保作業的一個實例(最多)將運行,並且當我們想要停止它時 - 我們實際上正在停止該實例。

這可以通過持久化正在運行的作業來實現,並且在運行新作業之前首先檢查我們是否沒有正在運行的作業。

第二個問題是,如果我理解正確,“停止”將停止任務的調度,例如,如果一個任務被安排為每分鍾運行一次,並且task.stop()被調用 - 該任務將不會下一分鍾又打來電話。 這並不意味着之前運行的任務中的代碼將停止執行,例如,如果您的代碼有無限循環,停止任務不會創建更多正在運行的代碼實例。 但是已經開始運行的實例將永遠運行。 這意味着您有責任確保您的代碼完成運行!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM