تعد cron أداة قوية لتشغيل المهام (الوظائف أو الأوامر) وفقًا لجداول زمنية محددة باستخدام بناء جملة cron.
مثالي لمهام مثل النسخ الاحتياطي للبيانات والإشعارات وغيرها الكثير!
تنفيذ وظيفة عندما يتم تشغيل المهمة المجدولة
تنفيذ مهمة خارج عملية جافا سكريبت (مثل أمر النظام) باستخدام child_process
استخدم كائن Date أو Luxon DateTime بدلاً من بناء جملة cron كمشغل لرد الاتصال الخاص بك
استخدم فتحة إضافية لمدة ثوانٍ (تركها في وضع إيقاف التشغيل سيكون الإعداد الافتراضي هو 0 ويطابق سلوك Unix)
تثبيت npm كرون
سمات
تثبيت
الترحيل من الإصدار 2 إلى الإصدار 3
الاستخدام الأساسي
أنماط كرون
نظرة عامة على بناء جملة كرون
النطاقات المدعومة
مسكتك
واجهة برمجة التطبيقات
وظائف مستقلة
فئة كرونجوب
فئة كرون تايم
مجتمع
انضم إلى المجتمع
المساهمة
المساهمة العامة
إرسال الأخطاء/المشاكل
شكر وتقدير
رخصة
مع تقديم TypeScript في الإصدار 3 والتوافق مع أنماط 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"، مع توفير المعلمات ككائن objectconst job = CronJob.from({cronTime: '* * * * * *',onTick: function () {console.log('سوف ترى هذا رسالة كل ثانية');},start: true,timeZone: 'America/Los_Angeles'});
ملاحظة: في المثال الأول أعلاه، تبدأ المعلمة الرابعة لـ
CronJob()
المهمة تلقائيًا. إذا لم يتم توفيره أو تم ضبطه على خطأ، فيجب عليك بدء المهمة بشكل صريح باستخدامjob.start()
.
لمزيد من الأمثلة المتقدمة، تحقق من دليل الأمثلة.
أنماط كرون هي العمود الفقري لهذه المكتبة. تعرف على بناء الجملة:
- `*` Asterisks: Any value - `1-3,5` Ranges: Ranges and individual values - `*/2` Steps: Every two units
تتوفر الأنماط والشروحات التفصيلية على crontab.org. تحتوي الأمثلة الموجودة في الرابط على خمسة حقول، ودقيقة واحدة باعتبارها الدقة الدقيقة، ولكن جدولة 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)
يمكن أيضًا استخدام الأسماء لحقول "الشهر" و"يوم الأسبوع". استخدم الأحرف الثلاثة الأولى من يوم أو شهر معين (لا يهم حالة الأحرف). النطاقات وقوائم الأسماء مسموح بها.
أمثلة: "mon,wed,fri" و"jan-mar".
لا يضمن كل من كائني 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
: [مطلوب] - الوقت المناسب لفصلك من وظيفتك. يمكن أن يكون بناء جملة 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
: [اختياري] - مكافئة للمنطقة timeZone
من معلمات CronJob
.
utcOffset
: [اختياري] - مشابه لـ utcOffset
من معلمات CronJob
.
انضم إلى خادم الديسكورد! هنا يمكنك مناقشة المشكلات والحصول على المساعدة في منتدى غير رسمي أكثر من منتدى GitHub.
هذا المشروع يبحث عن المساعدة! إذا كنت مهتمًا بالمساعدة في المشروع، فيرجى إلقاء نظرة على الوثائق المساهمة لدينا.
يرجى إلقاء نظرة على الوثائق المساهمة لدينا، فهي تحتوي على جميع المعلومات التي تحتاج إلى معرفتها قبل إرسال أي مشكلة.
هذا هو مشروع جهد المجتمع. بالمعنى الحقيقي، بدأ هذا المشروع كمشروع مفتوح المصدر من cron.js وتطور إلى شيء آخر. وقد ساهم أشخاص آخرون بالرمز والوقت والإشراف على المشروع. في هذه المرحلة، هناك الكثير مما يجب ذكره هنا، لذا سنقول شكرًا فقط.
شكر خاص إلى Hiroki Horiuchi وLundarl Gholoi وkoooge على عملهم في الكتابة المحددة بكتابة DefinitelyTyped قبل استيرادها في الإصدار 2.4.0.
معهد ماساتشوستس للتكنولوجيا