如何解决有没有一种方法可以立即在cron中启动作业,然后在执行完成后将其停止?
我刚刚开始使用cron,但是我找不到一种安排一次性工作的方法。 我拥有的东西正在为我工作,但是我想知道是否有更好的方法来实现它。
下面的代码创建一个作业,并在创建的控制台中打印。我每1秒钟设置一次计时器,但恰好在以下时间,我以1.5秒的睡眠时间来停止工作。
const express = require('express');
const cron = require('node-cron');
const router = express.Router();
const sleep = ms => new Promise(resolve => setTimeout(resolve,ms));
// Schedule a job on GET
router.get('/',(req,res,next) => {
const job = cron.schedule(`*/1 * * * * *`,() => {
console.log('job created');
});
sleep(1500).then(() => {
job.stop();
})
return res.status(200).json({ message: 'scheduled'});
});
解决方法
您可以构建cron表达式,如下所示。 “ 0 0 7 8 9?2020”(以秒为单位的小时数,表示dayOfMonth,Month,DayofWeek Year),它将仅运行一次。您需要根据要运行作业的第一天/时间来构建此表达式。如果需要立即运行,则可以根据当前时间+几秒钟的缓冲区来构建cron表达式
,按照 snp 的建议,我必须创建一个cron表达式,并带有最近的日期和几秒钟。而且,我意识到node-cron
包与cron
完全不同,即使它们重定向到同一位置。
我这样解决了:
const express = require('express');
const cron = require('cron'); // <- change of package
const router = express.Router();
const cronJob = cron.CronJob; // <- get the cron job from the package
const getDateAsCronExpression = () => { ... }
// Schedule a job on GET
router.get('/',(req,res,next) => {
const cronExpression = getDateAsCronExpression();
var job = new cronJob(cronExpression,() => {
console.log('job executed!');
},null,true,'your_time_zone_here');
return res.status(200).json({ message: 'scheduled'});
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。