Comment créer une tâche planifiée dans le projet node ? L'article suivant vous expliquera comment utiliser Node Schedule pour développer des scripts de tâches planifiées dans des projets de nœuds. J'espère qu'il vous sera utile ! Le backend de
nodejs a également besoin de tâches planifiées pour être traitées, telles que la sauvegarde, l'envoi programmé d'e-mails, le règlement et d'autres opérations, nous utilisons donc le npm Node Schedule pour nous aider à développer des scripts de tâches planifiées.
npm install node-schedule
Chaque tâche planifiée dans Node Schedule est représentée par un objet Job
. Vous pouvez le créer manuellement, puis exécuter la méthode schedule()
pour appliquer la tâche, ou utiliser scheduleJob()
comme suit. Job
对象表示。可以手动创建,然后执行schedule()
方法以应用任务,或使用scheduleJob()
如下。
Job
对象是`EventEmitter,并发出以下事件:
run
每次执行后的事件。scheduled
每次计划运行时的事件。canceled
,当它在执行之前调用被取消的事件。error
当被触发调度作业调用抛出或退出事件拒绝Promise
。(scheduled
和canceled
事件都接收一个 JavaScript 日期对象作为参数)。
注意的是,任务是第一次立即执行的,因此如果使用scheduleJob()
方法创建任务,将错过第一个scheduled
Job
est un `EventEmitter et émet les événements suivants : run
après chaque exécution. planifiés
Événements à chaque exécution du planning. annulé
qui est annulé lorsqu'il est appelé avant l'exécution. erreur
est générée lorsqu'un appel de tâche planifié est déclenché ou que l'événement de sortie rejette une Promesse
. programmés
et annulés
reçoivent un objet date JavaScript en tant que paramètre).
Notez que la tâche est exécutée immédiatement pour la première fois, donc si vous utilisez la méthode scheduleJob()
pour créer une tâche, vous manquerez le premier déclenchement d'événement programmé
, mais vous pouvez manuellement interroger l'appel.
* * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun) │ │ │ │ └───── month (1 - 12) │ │ │ └────────── day of month (1 - 31) │ │ └─────────────── hour (0 - 23) │ └──────────────────── minute (0 - 59) └───────────────────────── second (0 - 59, OPTIONAL) 每分钟的第30秒触发: '30 * * * * *' 每小时的1分30秒触发 :'30 1 * * * *' 每天的凌晨1点1分30秒触发 :'30 1 1 * * *' 每月的1日1点1分30秒触发 :'30 1 1 1 * *' 2016年的1月1日1点1分30秒触发 :'30 1 1 1 2016 *' 每周1的1点1分30秒触发 :'30 1 1 * * 1'
const schedule = require('node-schedule'); exports.Interval = class Interval { constructor({ unit_name, maintain_time, last_alarm }) { this.unit_name = unit_name // 任务名字 this.maintain_time = maintain_time // 定时时间 this.last_alarm = last_alarm || "" // 上一次定时任务名字 } // 生成新的定时任务 async create(callback) { // 终止之前的定时任务 if (this.last_alarm !== "") { this.delete(this.last_alarm) } schedule.scheduleJob(`${this.unit_name}`, `${this.maintain_time}`, callback); } // 删除定时任务 delete() { if (schedule.scheduledJobs[this.unit_name]) { schedule.scheduledJobs[this.unit_name].cancel(); return true } return false } // 找到一个定时任务 findOne(name) { if (schedule.scheduledJobs[name]) { return schedule.scheduledJobs[name] } else { throw new Error("未找到任务名") } } // 查看所有的定时任务 findAll() { return schedule.scheduledJobs } }
Voici un exemple d'intervalle de tâche planifiée lors d'un appel
// 定时任务 new Util.Interval({ unit_name: '自动分发任务 0 0 12 * * *', maintain_time: '0 0 12 * * *', last_alarm: '自动分发任务 0 0 12 * * *' }).create(async () => { // 写入你自己想在定时任务触发的时候,想要执行的函数 })
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!