我正在使用 Agenda 在某个时间安排我的工作。该作业将包含一定的电子邮件数组,这些电子邮件将在 10 秒的间隔内自动发送电子邮件,但问题是该作业未按预期执行。
无论计划时间设置为“2 分钟后”,调度程序都会立即运行。在启动服务器时,作业会立即运行并继续运行。除此之外,它还会打印出数据库中所有可用的条目。
这就是我安排工作的方式:
let Agenda = require("agenda");
let agenda = new Agenda();
agenda.database(`localhost:27017/${process.env.DB_NAME}`, "schedulers", {
useNewUrlParser: true,
useUnifiedTopology: true,
});
var i = 0;
agenda.define("campaignScheduler", function (job) {
i++;
console.log(
i +
" Run at " +
new Date().getHours() +
":" +
new Date().getMinutes() +
":" +
new Date().getSeconds()
);
});
const testData = {
name: "John Snow",
userId: "j0dn.j213b455b.bchds0",
};
agenda.start();
agenda.on("ready", () => {
agenda
.create("campaignScheduler", testData)
.unique({ "data.unique_id": testData.userId })
.repeatEvery("*/10 * * * * *", {
timezone: "America/Los_Angeles",
})
.schedule("in 2 minutes")
.save();
agenda.on("complete", (job) => {
console.log(`finished job`, job.attrs);
});
agenda.on("job success", (job) => {
console.log(`Successfull`);
});
agenda.on("job fail", (err, job) => {
console.log(`Job failed with error: ${err.message}`);
});
});
let graceful = () => {
agenda.stop(() => process.exit(0));
};
process.on("SIGTERM", graceful);
process.on("SIGINT", graceful);
控制台上的结果:
db 上的结果:
保存到数据库的结果相当混乱。请帮助解决此问题。