مجدول المهام في Node.js (node-cron، node-schedule، Bull)

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

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

ابدأ الدورة

مجدول المهام في Node.js: نظرة عامة وأمثلة على الاستخدام



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



1. node-cron — cron الكلاسيكي لـ JavaScript



node-cron هي مكتبة بسيطة تسمح بتشغيل الدوال وفقًا لتعبيرات cron القياسية. إنها مثالية للمهام الدورية البسيطة (كل دقيقة، كل ساعة، كل يوم في الساعة 3:00).



التثبيت:



npm install node-cron


مثال لمهمة تُنفذ كل دقيقة:



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

cron.schedule('* * * * *', () => { console.log('المهمة تُنفذ كل دقيقة');});


هيكل تعبير cron: ثانية دقيقة ساعة يوم_شهر شهر يوم_أسبوع (في node-cron، الثانية اختيارية).



أمثلة على التعبيرات:

  • '0 0 * * *' — كل يوم عند منتصف الليل
  • '*/5 * * * *' — كل 5 دقائق
  • '0 9-18 * * 1-5' — كل ساعة من 9 إلى 18 في أيام العمل
  • '30 3 * * 0' — كل يوم أحد في الساعة 3:30


تدعم المكتبة التحقق من صحة التعبيرات وتشغيل/إيقاف المهام:



const task = cron.schedule('*/10 * * * *', () => {  // مهمة كل 10 دقائق});

// إيقاف المهمةtask.stop();

// استئنافهاtask.start();

// التحقق مما إذا كانت المهمة نشطةconsole.log(task.isStarted()); // true/false


متى تستخدم: للإجراءات الدورية البسيطة التي لا تتطلب تخزين حالة أو معالجة أخطاء.



2. node-schedule — جدولة مرنة مع دعم القواعد المتكررة



node-schedule هو بديل أكثر قوة يسمح بتعيين الجدول ليس فقط عبر cron، ولكن أيضًا عبر كائنات JavaScript مع تحديد واضح للتواريخ وأيام الأسبوع والوقت.



التثبيت:



npm install node-schedule


مثال مع تعبير cron:



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

const job = schedule.scheduleJob('*/5 * * * *', () => { console.log('يُتنفذ كل 5 دقائق');});


الميزة الرئيسية هي إمكانية تعيين الجدول عبر كائن:



const job = schedule.scheduleJob({  hour: 14,  minute: 30,  dayOfWeek: [1, 3, 5] // الاثنين، الأربعاء، الجمعة}, () => {  console.log('14:30 في أيام العمل');});


كما يمكن جدولة مهمة لمرة واحدة في تاريخ محدد:



const date = new Date(2025, 11, 31, 23, 59, 0);

schedule.scheduleJob(date, () => { console.log('حلّت السنة الجديدة!');});


تدعم المكتبة إلغاء المهمة والتحقق من وقت التنفيذ التالي:



// إلغاء المهمةjob.cancel();

// الحصول على تاريخ التنفيذ التاليconsole.log(job.nextInvocation()); // كائن Date


متى تستخدم: عندما تحتاج إلى تحكم دقيق في الوقت، أو دمج القواعد، أو مهام لمرة واحدة.



3. Bull — قوائم انتظار المهام مع الجدولة وإعادة المحاولة



Bull هو نظام قوائم انتظار كامل يعتمد على Redis، ويتضمن جدولة قوية. يسمح Bull ليس فقط بتأجيل المهام، ولكن أيضًا بإدارة إعادة المحاولة والأولويات والتنفيذ المتوازي.



التثبيت:



npm install bull


مثال أساسي لقائمة انتظار مع مهمة مؤجلة:



const Queue = require('bull');

const emailQueue = new Queue('email', { redis: { host: 'localhost', port: 63

توصيات