مجدول المهام في Node.js: node-schedule و node-cron

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مجدول المهام في Node.js: node-schedule و node-cron



في تطوير الويب الحديث، غالبًا ما تنشأ الحاجة لتنفيذ إجراءات معينة في وقت محدد أو على فترات زمنية متساوية. على سبيل المثال، إرسال التقارير عبر البريد الإلكتروني، تنظيف قاعدة البيانات، تحليل الموارد الخارجية أو تحديث ذاكرة التخزين المؤقت. في بيئة Node.js، تُستخدم مجدولات المهام لهذه الأغراض. الأداتان الأكثر شيوعًا هما node-schedule و node-cron. في هذه المقالة، سنشرح كلاهما بالتفصيل، ونقدم أمثلة على الكود، ونساعدك في اختيار الأنسب لمشروعك.



لماذا تحتاج إلى مجدول مهام في Node.js؟

Node.js هي بيئة أحادية الخيط ذات بنية موجهة بالأحداث. تتيح الدوال المدمجة setTimeout و setInterval تنفيذ الكود بتأخير أو بشكل دوري، لكنها غير مناسبة للسيناريوهات المعقدة:

  • لا توجد مرونة في الإعداد (مثل "كل يوم اثنين ثاني من الشهر الساعة 10:30").
  • لا تحتفظ بالحالة بعد إعادة تشغيل التطبيق.
  • صعوبات في الإدارة (الإلغاء، تعديل الجدول).

تحل المجدولات هذه المشكلات من خلال توفير واجهة برمجة تطبيقات بسيطة لإنشاء المهام المجدولة وتشغيلها وإلغائها.



مكتبة node-schedule

node-schedule هو مجدول مرن يعتمد على بناء جملة مشابه لـ cron، ولكن مع إمكانيات موسعة. يسمح بتعيين مهام متكررة بدقة تصل إلى الدقيقة، بالإضافة إلى مهام لمرة واحدة في تاريخ محدد.



التثبيت

npm install node-schedule


الإمكانيات الرئيسية

  • دعم تعبيرات cron (6 حقول: الثواني، الدقائق، الساعات، يوم الشهر، الشهر، يوم الأسبوع).
  • إمكانية تعيين تنفيذ لمرة واحدة باستخدام كائن Date.
  • قواعد متكررة باستخدام كائن RecurrenceRule.
  • طرق cancel() و cancelNext() لإدارة المهام.


مثال 1: تشغيل مهمة كل 5 دقائق

const schedule = require('node-schedule');

const job = schedule.scheduleJob('*/5 * * * *', function() { console.log('المهمة تُنفذ كل 5 دقائق:', new Date().toLocaleString());});

// إلغاء المهمة بعد 20 دقيقةsetTimeout(() => { job.cancel(); console.log('تم إلغاء المهمة');}, 20 * 60 * 1000);


مثال 2: مهمة في تاريخ محدد

const schedule = require('node-schedule');

const date = new Date(2025, 5, 15, 10, 30, 0); // 15 يونيو 2025، الساعة 10:30:00

const job = schedule.scheduleJob(date, function() { console.log('تم تنفيذ المهمة لمرة واحدة في', new Date().toLocaleString());});

console.log('المهمة مجدولة في', date.toLocaleString());


مثال 3: قاعدة متكررة معقدة

const schedule = require('node-schedule');

const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // الاثنين، الأربعاء، الجمعةrule.hour = 9;rule.minute = 0;

const job = schedule.scheduleJob(rule, function() { console.log('المهمة تُنفذ في الساعة 9:00 في أيام العمل (الإثنين، الأربعاء، الجمعة)');});


مكتبة node-cron

node-cron هو بديل خفيف الوزن يعتمد على cron الكلاسيكي من أنظمة Unix. إنه أبسط في الاستخدام، ولكنه أقل مرونة من node-schedule. يدعم 5 حقول (الدقائق، الساعات، يوم الشهر، الشهر، يوم الأسبوع).



التثبيت

npm install node-cron


الإمكانيات الرئيسية

  • بناء جملة cron قياسي (5 حقول).
  • طرق start()، stop()، destroy().
  • دعم المناطق الزمنية من خلال الخيار timezone.
  • إمكانية تشغيل المهمة فورًا باستخدام now().


مثال 1: تشغيل مهمة كل يوم عند منتصف الليل

const c                    

توصيات