cron เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการรันงาน (ฟังก์ชันหรือคำสั่ง) ตามกำหนดเวลาที่กำหนดโดยใช้ไวยากรณ์ cron
เหมาะสำหรับงานต่างๆ เช่น การสำรองข้อมูล การแจ้งเตือน และอื่นๆ อีกมากมาย!
รันฟังก์ชันเมื่อใดก็ตามที่งานที่กำหนดเวลาไว้ของคุณทริกเกอร์
รันงานภายนอกกระบวนการจาวาสคริปต์ (เช่นคำสั่งระบบ) โดยใช้ child_process
ใช้วัตถุ Date หรือ Luxon DateTime แทนไวยากรณ์ cron เป็นตัวกระตุ้นสำหรับการโทรกลับของคุณ
ใช้ช่องเพิ่มเติมเป็นเวลาไม่กี่วินาที (การปล่อยทิ้งไว้จะเป็นค่าเริ่มต้นที่ 0 และตรงกับพฤติกรรมของ Unix)
npm ติดตั้ง cron
คุณสมบัติ
การติดตั้ง
การย้ายจาก v2 เป็น v3
การใช้งานขั้นพื้นฐาน
รูปแบบครอน
ภาพรวมไวยากรณ์ Cron
ช่วงที่รองรับ
ก็อตชาส
เอพีไอ
ฟังก์ชั่นแบบสแตนด์อโลน
คลาส CronJob
คลาสครอนไทม์
ชุมชน
เข้าร่วมชุมชน
มีส่วนร่วม
ผลงานทั่วไป
การส่งข้อบกพร่อง/ปัญหา
รับทราบ
ใบอนุญาต
ด้วยการเปิดตัว TypeScript ในเวอร์ชัน 3 และการจัดตำแหน่งให้สอดคล้องกับรูปแบบ cron ของ UNIX ทำให้เกิดการเปลี่ยนแปลงบางประการ:
การจัดทำดัชนีเดือน: เปลี่ยนจาก 0-11
เป็น 1-12
ดังนั้นคุณต้องเพิ่มเดือนที่เป็นตัวเลขทั้งหมดด้วย 1
การจัดทำดัชนีวันในสัปดาห์: เพิ่มการสนับสนุนสำหรับ 7
เป็นวันอาทิตย์
CronJob
ตัวสร้างไม่ยอมรับวัตถุเป็นพารามิเตอร์แรกและพารามิเตอร์เดียวอีกต่อไป ใช้ CronJob.from(argsObject)
แทน
ตอนนี้การโทรกลับจะถูกเรียกตามลำดับที่ลงทะเบียนไว้
nextDates(count?: number)
จะส่งกลับอาร์เรย์เสมอ (ว่างเปล่าหากไม่มีการระบุอาร์กิวเมนต์) ใช้ nextDate()
แทนสำหรับวันที่เดียว
ลบเมธอด job()
ออกเพื่อสนับสนุน new CronJob(...args)
/ CronJob.from(argsObject)
ลบเมธอด time()
เพื่อสนับสนุน new CronTime()
นำเข้า { CronJob } จาก 'cron';const job = new CronJob('* * * * * *', // cronTimefunction () {console.log('คุณจะเห็นข้อความนี้ทุกวินาที');}, // onTicknull , // onCompletetrue, // start'America/Los_Angeles' // timeZone);// job.start() เป็นทางเลือกที่นี่ เนื่องจากพารามิเตอร์ตัวที่สี่ตั้งค่าเป็นจริง
// งานที่เทียบเท่าโดยใช้วิธีคงที่ "จาก" โดยระบุพารามิเตอร์เป็นงาน objectconst = CronJob.from({cronTime: '* * * * * *',onTick: function () {console.log('คุณจะเห็นสิ่งนี้ ข้อความทุกวินาที');}, เริ่มต้น: จริง, โซนเวลา: 'อเมริกา/Los_Angeles'});
หมายเหตุ: ในตัวอย่างแรกข้างต้น พารามิเตอร์ที่สี่ของ
CronJob()
จะเริ่มทำงานโดยอัตโนมัติ หากไม่มีการระบุหรือตั้งค่าเป็นเท็จ คุณต้องเริ่มงานอย่างชัดเจนโดยใช้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
ของพาเรนต์ เป็นผลให้พวกเขาไม่สามารถเข้าถึง this
ของ cronjob ได้ คุณสามารถอ่านเพิ่มเติมอีกเล็กน้อยในฉบับที่ 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
: [REQUIRED] - เวลาในการไล่งานของคุณ สามารถเป็นไวยากรณ์ cron, วัตถุ JS Date
หรือวัตถุ Luxon DateTime
onTick
: [จำเป็น] - ฟังก์ชั่นที่จะดำเนินการตามเวลาที่กำหนด หากมีการระบุการโทรกลับ onComplete
onTick
จะได้รับเป็นอาร์กิวเมนต์
onComplete
: [OPTIONAL] - เรียกใช้เมื่องานหยุดด้วย job.stop()
มันอาจจะถูกทริกเกอร์โดย onTick
โพสต์การทำงาน
start
: [OPTIONAL] - กำหนดว่างานควรเริ่มก่อนตัวสร้างจะออกหรือไม่ ค่าเริ่มต้นเป็น false
timeZone
: [OPTIONAL] - ตั้งค่าเขตเวลาดำเนินการ ค่าเริ่มต้นคือเวลาท้องถิ่น ตรวจสอบรูปแบบที่ถูกต้องในเอกสารประกอบของ Luxon
context
: [ไม่บังคับ] - บริบทการดำเนินการสำหรับเมธอด onTick
runOnInit
: [ไม่บังคับ] - ทริกเกอร์การเริ่มต้นฟังก์ชัน onTick
ทันที ค่าเริ่มต้นเป็น false
utcOffset
: [OPTIONAL] - ระบุออฟเซ็ตเขตเวลาเป็นนาที ไม่สามารถอยู่ร่วมกับ 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
: [ไม่บังคับ] - เทียบเท่ากับ timeZone
จากพารามิเตอร์ CronJob
utcOffset
: [ไม่บังคับ] - คล้ายกับ utcOffset
จากพารามิเตอร์ CronJob
เข้าร่วมเซิร์ฟเวอร์ Discord! ที่นี่คุณสามารถหารือเกี่ยวกับปัญหาและรับความช่วยเหลือในฟอรัมที่เป็นกันเองมากกว่า GitHub
โครงการนี้กำลังมองหาความช่วยเหลือ! หากคุณสนใจที่จะช่วยเหลือในโครงการ โปรดดูเอกสารประกอบของเรา
โปรดดูเอกสารประกอบของเรา ซึ่งมีข้อมูลทั้งหมดที่คุณต้องรู้ก่อนส่งปัญหา
นี่เป็นโครงการความพยายามของชุมชน ในความหมายที่แท้จริงที่สุด โปรเจ็กต์นี้เริ่มต้นจากโปรเจ็กต์โอเพ่นซอร์สจาก cron.js และเติบโตเป็นอย่างอื่น คนอื่นๆ มีส่วนร่วมกับโค้ด เวลา และการกำกับดูแลโปรเจ็กต์ ณ จุดนี้ มีมากเกินไปที่จะเอ่ยชื่อที่นี่ ดังนั้นเราจะกล่าวขอบคุณ
ขอขอบคุณเป็นพิเศษสำหรับ Hiroki Horiuchi, Lundarl Gholoi และ koooge สำหรับงานพิมพ์ SureTyped ก่อนที่จะนำเข้าในเวอร์ชัน 2.4.0
เอ็มไอที