如何在从 MongoDB 检索 cron 值的 Node.js 应用程序中运行 cron 作业?

问题描述 投票:0回答:0

从节点应用程序运行 Cron 作业

大家好 我必须运行从 MongoDB 集合接收的 cron 作业(比如“作业”) 但 这些 cron 时间可以根据需要由用户更改,i.e.用户可以随时从 UI 更改 cron 值。我正在使用 npm 的“cron”包 我可以按如下方式安排 cron

var CronJob = require('cron').CronJob;
let cronJobs = []
let currentCronJob 
async function createCronJobs(cronJobs){
    const jobs =  await Jobs.find({},{_id:1,clientId:1,name:1,frequency:1})
    for(let job of jobs){
        if(job.frequency.type == "scheduled"){
            for (let cron_str of job.frequency.schedule){
                currentCronJob = new CronJob(
                    cron_str,
                    function() {
                        console.log("Executed",cron_str,job.name)
                    },
                    null,
                    true,
                    'Asia/Kolkata'
                )
                cronJobs.push(currentCronJob) 
            }
        }
    }
    currentCronJob.start()
}
createCronJobs(cronJobs)

在代码中,我使用 Mongoose 创建一个新连接,并遍历所有文档以检查 frequency.type == "scheduled" 如果已安排,那么我将检索所有 cron 值并使用 CronJob 方法安排 cron.

我的问题

如果 cron 时间没有改变,上面的代码工作得很好,也就是说,如果它在作业集合中保持不变,但是如果 cron 值随着时间的推移而改变,那么我无法在上面的函数中执行必要的更改,以便它检测 cron 的变化并根据新修改的 cron 执行。

注意 - 我已经阅读了 watch 包,但它说 This functionality is only available on a MongoDB Replicaset

对于冗长的问题或任何拼写或语法错误(如果存在),我们深表歉意。

node.js mongodb mongoose cron
© www.soinside.com 2019 - 2024. All rights reserved.