[英]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.