使用Node.js的Node-cron進行任務排程 - Dilina
在使用 Node.js 構建 Web 應用程式和 API 時,我們有時會遇到需要重複執行的任務,例如電子郵件通知、檔案下載和資料庫備份等。 這可能是每天、每月甚至每年的特定時間,具體取決於在任務上。
Node-schedule是 Node.js 最流行的靈活的類似 cron 的任務排程庫。兩者很類似,是基於時間的時間表,而不是基於間隔的時間表和它被設計為在程式的排程。程式內排程意味著“排程作業只會在您的指令碼執行時觸發,並且在執行完成時排程將消失”。
如果您需要安排即使在您的指令碼未執行時也會持續存在的作業,請考慮使用實際的 Node-cron。
Node-cron 簡介
Node-cron是一個npm 包,它是用純 JavaScript為node編寫的,它基於GNU crontab語法。因此,第一步是基於學習node-cron和cron-syntaxes。
Node-cron 語法
cron 的操作由crontab(cron 表)檔案驅動,這是一個包含 cron 守護程式指令的配置檔案。Cron 守護程式是在記憶體中執行的系統管理可執行檔案,可用於排程任務。
以下作業計劃在每小時的每 2 分鐘執行一次。
import * as cron from 'node-cron' cron.schedule('* 2 * * * *', () => { console.log('execute task every hour at the 2nd minute'); }); |
上述*的地方意味著“每一秒、每一小時、每一天、每一個月和一週中的每一天”。
下面的另一個例子顯示了每天早上 5.30 執行的 cron 作業,
cron.schedule('30 5 * * *', () => { console.log('execute task every day at 5:30 am'); }); |
如果我們想安排在一年中每個季度的第一天執行的作業,我們可以按如下方式進行。
cron.schedule('0 0 1 */3 *', () => { console.log('execute task every quater on the first day of the month'); }); |
在這裡你可以看到,我們使用了一個特殊的字元 (/),而不是通常的星號。就這樣,cron 作業排程中引入了一些特殊字元,我們可以將它們表示如下。
- 逗號:逗號可用於分隔少數幾個值。例如,每 2 分鐘和 5 分鐘,我們可以將其表示為 2,5。
- 連字元:連字元 (-) 用於提供值的範圍,例如 Monday-Friday。
- 斜線:斜線用於提供步進值,例如每 5 秒,我們可以將其表示為 */5。
下面顯示了另一個示例,它可以安排作業在每週一到週五(僅限工作日)下午 4 點執行:
cron.schedule('0 16 * * 1-5', () => { console.log('running a task every weekday at 4:00 pm'); }); |
另一個例子顯示了在早上 5 點到早上 7 點之間每 15 分鐘執行一次的作業。
cron.schedule('*/15 5-7 * * *', () => { console.log('execute task every 15 minutes between 5 a.m. and 7 a.m.'); }); |
作業排程中使用的方法
啟動計劃:在初始化時,如果將 cron 選項設定為 False,那麼即使到達計劃時間,計劃作業也不會執行。如果您需要啟動該作業,則需要呼叫如下所示的start方法。
const cron = require('node-cron'); import * as cron from 'node-cron' const job = cron.schedule('*/5 5-7 * * *', () => { console.log('execute task every 15 minutes between 5 a.m. and 7 a.m.'); }); job.start(); |
停止排程:如果您需要停止正在執行的任何排程,您應該使用stop方法。即使重新啟動,計劃也不會執行。
const cron = require('node-cron'); import * as cron from 'node-cron' const job = cron.schedule('*/5 5-7 * * *', () => { console.log('execute task every 15 minutes between 5 a.m. and 7 a.m.'); }); job.stop(); |
銷燬時間表:您可以使用destroy方法永久銷燬時間表。
const cron = require('node-cron'); import * as cron from 'node-cron' const job = cron.schedule('*/5 5-7 * * *', () => { console.log('execute task every 15 minutes between 5 a.m. and 7 a.m.'); }); job.destroy(); |
相關文章
- Spring Boot應用中進行任務排程Spring Boot
- 任務排程
- laravel框架任務排程(定時執行任務)Laravel框架
- 任務排程的並行演算法並行演算法
- OpenMP 中的執行緒任務排程執行緒
- Laravel 任務排程Laravel
- Airflow 任務排程AI
- 聊聊PowerJob的任務排程
- Spark中資源排程和任務排程Spark
- 分散式任務排程分散式
- Nucleus PLUS任務排程
- linux 任務排程Linux
- Flink - Task 任務排程執行流程
- 使用Java實現定時任務排程Java
- Laravel 服務之任務排程Laravel
- 在 Golang 中進行「任務排程」,像用 Laravel 一樣絲滑GolangLaravel
- Linux 中 Laravel 任務排程不執行LinuxLaravel
- 分散式排程任務-ElasticJob分散式AST
- Spring 指南(排程任務)Spring
- 【Spark篇】---Spark資源排程和任務排程Spark
- 基於Hyperf開發的任務排程系統.支援任務投遞,DAG任務編排(多個任務使用同一個事務).
- 任務排程的思考和總結
- 學習SQL Server 的任務排程SQLServer
- 比特幣原始碼分析:任務排程器的使用比特幣原始碼
- LTS分散式任務排程部署分散式
- Linux 定時任務排程Linux
- Quartz任務排程快速入門quartz
- ZooKeeper分散式任務排程中心分散式
- 獨立任務最優排程
- 快速掌握SQL Server任務排程SQLServer
- Oracle任務排程工具學習Oracle
- CloseableHttpClient 連線超時導致XxlJob排程阻塞,影響排程任務的執行HTTPclient
- Android 中的定時任務排程Android
- Spring排程定時任務的方式Spring
- DAG任務排程系統 Taier 演進之道,探究DataSourceX 模組AI
- 任務排程並行演算法的Java簡單實現並行演算法Java
- LiteOS-任務篇-原始碼分析-任務排程函式原始碼函式
- Python任務排程模組APSchedulerPython