大家好 我必须运行从 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
对于冗长的问题或任何拼写或语法错误(如果存在),我们深表歉意。