一、NodeSchedule 是什麼
NodeSchedule 是一個基於 Node.js 平台的第三方定時任務工具。它可以實現多種執行方式的定時任務,例如每隔一段時間執行一次、每天固定時間執行、每周固定時間執行、每月固定時間執行等。使用 NodeSchedule 可以非常方便地實現定時向用戶發送郵件、生成每日報告、備份數據、添加定時任務等功能。
NodeSchedule 受啟發於 UNIX 操作系統的 crontab。因此,你可以在不同的時區,基於不同的時間單位,非常方便地編寫你自己的任務計劃。
二、NodeSchedule 的安裝和使用
NodeSchedule 可以通過 npm 包管理器進行安裝,這是非常簡單的。
npm install node-schedule
下面是一段簡單的使用 NodeSchedule 的代碼:
const schedule = require('node-schedule'); const task = schedule.scheduleJob('30 * * * * *', () => { console.log('每分鐘的第 30 秒觸發'); }); // 取消定時任務 task.cancel();
這段代碼在每分鐘的第 30 秒觸發任務輸出信息。當你想要取消定時任務時,只需調用 job.cancel()
方法即可取消任務。
三、NodeSchedule 完整的時間規則表達式
使用 NodeSchedule 的核心是使用時間規則表達式。下面是一個完整的時間規則表達式:
* * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ └ day of the week (0 - 7) (0 or 7 is Sun) │ │ │ │ └───── month (1 - 12) │ │ │ └────────── day of the month (1 - 31) │ │ └─────────────── hour (0 - 23) │ └──────────────────── minute (0 - 59) └───────────────────────── second (0 - 59, OPTIONAL)
表格中的每個星號可以被替換為具體的數字,下面是一些示例:
* * * * * *
:每秒觸發一次(非標準語法)0 * * * * *
:每分鐘的開始時刻觸發*/10 * * * * *
:每分鐘內每隔 10 秒觸發一次30 3 * * * *
:每天的凌晨三點半觸發0 0 * * * *
:每天的零點觸發0 0 10 * * *
:每天的 10 點觸發0 0 10 * * 1
:每周一的 10 點觸發0 0 10 15 * *
:每個月 15 號的 10 點觸發0 0 10 15 1 *
:每年 1 月 15 號的 10 點觸發
四、NodeSchedule 的進階應用
下面是一些 NodeSchedule 的高級用法:
1. 在指定時間觸發一次
下面的代碼指定了在 2019 年 9 月 18 日的下午 4 點鐘觸發一次任務。
const date = new Date(2019, 8, 18, 16, 0, 0); const task = schedule.scheduleJob(date, () => { console.log('今天是我的生日'); });
2. 取消任務
你可以使用 job.cancel()
方法取消一個任務。下面的代碼定義了一個任務,並在 1 分鐘後取消這個任務。
const task = schedule.scheduleJob('*/1 * * * *', () => { console.log('每分鐘觸發一次'); }); setTimeout(() => { task.cancel(); }, 60000);
3. 每周五和周六 18 點觸發任務
下面的代碼定義了一個每周五和周六 18 點鐘觸發的任務。
let rule = new schedule.RecurrenceRule(); rule.dayOfWeek = [5, 6]; rule.hour = 18; rule.minute = 0; const task = schedule.scheduleJob(rule, () => { console.log('周末快樂'); });
4. 將任務存儲到數組中依次執行
下面的代碼定義了一個任務數組,存儲 3 個任務。通過數組的遍歷,循環執行每一個任務。
const tasks = [ { time: '*/5 * * * *', action: () => { console.log('每 5 分鐘觸發一次'); } }, { time: '* * 2 * * *', action: () => { console.log('每月第二天執行'); } }, { time: '* 30 11 * * 2,4,6', action: () => { console.log('每周二、周四、周六的 11 點 30 觸發'); } } ]; tasks.forEach(task => { schedule.scheduleJob(task.time, task.action); });
五、結語
NodeSchedule 提供了非常簡單的方式來實現定時任務。通過對時間規則表達式的理解和使用,你可以很方便地實現各種場景下的定時任務。此外,NodeSchedule 還提供了一些進階使用和高級特性,使得它可以適應更為複雜的需求。
原創文章,作者:DNLY,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/136258.html