cron是一個強大的工具,用於按照使用 cron 語法定義的計劃運行作業(函數或命令)。
非常適合資料備份、通知等任務!
每當您的排程作業觸發時執行一個函數
使用child_process
執行 javascript 流程外部的作業(如係統指令)
使用 Date 或 Luxon DateTime 物件而不是 cron 語法作為回調的觸發器
使用額外的槽數秒(將其關閉將預設為 0 並匹配 Unix 行為)
npm 安裝 cron
特徵
安裝
從 v2 遷移到 v3
基本用法
Cron 模式
Cron 語法概述
支援的範圍
陷阱
應用程式介面
獨立功能
CronJob 類
CronTime 類別
社群
加入社區
貢獻
一般貢獻
提交錯誤/問題
致謝
執照
隨著版本 3 中引入 TypeScript 並與 UNIX cron 模式保持一致,進行了一些更改:
月份索引:從0-11
更改為1-12
。因此,您需要將所有數字月份加 1。
星期索引:新增了對7
作為星期日的支援。
CronJob
的調整建構函數不再接受物件作為其第一個也是唯一的參數。請改用CronJob.from(argsObject)
。
回調現在按照註冊的順序呼叫。
nextDates(count?: number)
現在總是傳回一個陣列(如果未提供參數則為空)。使用nextDate()
代替單一日期。
刪除了job()
方法,改用new CronJob(...args)
/ CronJob.from(argsObject)
刪除了time()
方法,改用new CronTime()
import { CronJob } from 'cron';const job = new CronJob('* * * * * *', // cronTimefunction () {console.log('你每秒都會看到這則訊息');}, / / onTicknull , // onCompletetrue, // start'America/Los_Angeles' // timeZone);// job.start() 這裡是可選的,因為第四個參數設定為 true。
// 使用「from」靜態方法的等值作業,以物件形式提供參數const job = CronJob.from({cronTime: '* * * * * *',onTick: function () {console.log('You will see this每秒訊息');},start: true,timeZone: 'America/Los_Angeles'});
注意:在上面的第一個範例中,
CronJob()
的第四個參數會自動啟動作業。如果未提供或設定為 false,則必須使用job.start()
明確啟動作業。
有關更高級的範例,請檢查範例目錄。
Cron 模式是這個函式庫的支柱。熟悉語法:
- `*` Asterisks: Any value - `1-3,5` Ranges: Ranges and individual values - `*/2` Steps: Every two units
詳細的模式和解釋可以在 crontab.org 上找到。連結中的範例有五個字段,最細粒度為 1 分鐘,但我們的 cron 調度支援具有六個字段的增強格式,允許秒級精度。像 crontab.guru 這樣的工具可以幫助建立模式,但請記住考慮秒字段。
以下是該庫使用的 UNIX Cron 格式的快速參考,以及新增的第二個欄位:
field allowed values ----- -------------- second 0-59 minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sunday, or use names)
名稱也可用於「月份」和「星期幾」欄位。使用特定日期或月份的前三個字母(不區分大小寫)。允許名稱範圍和清單。
例如:「週一、週三、週五」、「一月至三月」。
由於計算延遲,JS Date
和 Luxon DateTime
物件都不保證毫秒精確度。此模組不包括標準 cron 語法的毫秒精度,但允許透過 JS Date
或 Luxon DateTime
物件指定執行日期。然而,由於這些計算延遲,指定精確的未來執行時間(例如在當前時間上添加毫秒)可能並不總是有效。據觀察,小於 4-5 毫秒的延遲可能會導致不一致。雖然我們可以將所有日期粒度限制為秒,但我們選擇允許更高的精確度,但會建議使用者潛在的問題。
使用onTick
的箭頭函數將它們綁定到父級的this
上下文。因此,他們將無法存取 cronjob 的this
上下文。您可以在第 47 期(評論)中閱讀更多內容。
sendAt
:指示CronTime
何時執行(傳回 Luxon DateTime
物件)。
import * as cron from 'cron';const dt = cron.sendAt('0 0 * * *');console.log(`作業將運行於:${dt.toISO()}`);
timeout
:表示未來多少毫秒將執行CronTime
(傳回一個數字)。
import * as cron from 'cron';const timeout = cron.timeout('0 0 * * *');console.log(`作業將在 ${timeout}ms 內執行`);
constructor(cronTime, onTick, onComplete, start, timeZone, context, runOnInit, utcOffset, unrefTimeout)
:
cronTime
:[必需] - 結束工作的時間。可以是 cron 語法、JS Date
物件或 Luxon DateTime
物件。
onTick
:[必需] - 在指定時間執行的函數。如果提供了onComplete
回調, onTick
將接收它作為參數。
onComplete
:[可選] - 當作業透過job.stop()
停止時呼叫。它也可能由onTick
運行後觸發。
start
: [可選] - 確定作業是否應在建構子退出之前開始。預設為false
。
timeZone
: [可選] - 設定執行時區。預設為當地時間。檢查 Luxon 文件中的有效格式。
context
: [可選] - onTick 方法的執行上下文。
runOnInit
:[可選] - 初始化後立即觸發onTick
函數。預設為false
。
utcOffset
: [可選] - 指定時區偏移量(以分鐘為單位)。無法與timeZone
共存。
unrefTimeout
:[可選] - 用於控制事件循環行為。更多詳細資訊請參閱此處。
from
(靜態):建立新的 CronJob 對象,提供參數作為對象。請參閱上面的參數名稱和描述。
start
:啟動作業。
stop
:停止工作。
setTime
:修改CronJob
的時間。參數必須是CronTime
。
lastDate
:提供最後執行日期。
nextDate
:指示將啟動onTick
的後續日期。
nextDates(count)
:提供即將啟動onTick
的即將到來的日期數組。
fireOnTick
:允許修改onTick
呼叫行為。
addCallback
:允許新增onTick
回呼。
constructor(time, zone, utcOffset)
:
time
: [必備] - 開始工作的時間。接受 cron 語法或 JS Date 物件。
zone
: [可選] - 相當於CronJob
參數中的timeZone
。
utcOffset
:[可選] - 類似CronJob
參數中的utcOffset
。
加入Discord伺服器!在這裡,您可以在比 GitHub 更休閒的論壇中討論問題並獲得幫助。
該項目正在尋求幫助!如果您有興趣幫助該項目,請查看我們的貢獻文件。
請查看我們的貢獻文檔,它包含您在提交問題之前需要了解的所有資訊。
這是一個社區努力項目。從最真實的意義上來說,這個項目最初是 cron.js 的一個開源項目,後來發展成為其他項目。其他人為該專案貢獻了程式碼、時間和監督。在這一點上,有太多的人在這裡無法一一列舉,所以我們只能說謝謝。
特別感謝 Hiroki Horiuchi、Lundarl Gholoi 和 koooge 在 DefineTyped 類型被導入 v2.4.0 之前所做的工作。
麻省理工學院