جزء من مجموعة: أدوات المطوّرين
أمان وتقنية

مولّد Cron Expressions

ابنِ تعبيرات Cron بصرياً + شرح بالعربية

شرح عربي10 تشغيلات قادمةLinux + AWS
قوالب جاهزة
*/15
الدقيقة (0–59)
*
الساعة (0–23)
*
اليوم في الشهر (1–31)
*
الشهر (1–12)
*
اليوم في الأسبوع (0–6، الأحد=0)
الوصف
كل 15 دقائق
  1. #1الاثنين، 29 يونيو 2026، 16:152026-06-29T16:15:00.000Z
  2. #2الاثنين، 29 يونيو 2026، 16:302026-06-29T16:30:00.000Z
  3. #3الاثنين، 29 يونيو 2026، 16:452026-06-29T16:45:00.000Z
  4. #4الاثنين، 29 يونيو 2026، 17:002026-06-29T17:00:00.000Z
  5. #5الاثنين، 29 يونيو 2026، 17:152026-06-29T17:15:00.000Z
  6. #6الاثنين، 29 يونيو 2026، 17:302026-06-29T17:30:00.000Z
  7. #7الاثنين، 29 يونيو 2026، 17:452026-06-29T17:45:00.000Z
  8. #8الاثنين، 29 يونيو 2026، 18:002026-06-29T18:00:00.000Z
  9. #9الاثنين، 29 يونيو 2026، 18:152026-06-29T18:15:00.000Z
  10. #10الاثنين، 29 يونيو 2026، 18:302026-06-29T18:30:00.000Z

كل المعالجة تتم محلياً في متصفّحك. لا يتم إرسال أي بيانات لأي خادم.

دليل شامل

Cron Expressions: من 5 خانات إلى جدولة محترفة

بنية Cron، الفروقات بين Linux و AWS و Spring، وأنماط الجدولة الأكثر استخداماً.

8 دقائق قراءة·تحديث مايو 2026

لماذا Cron لا يزال أهم أداة جدولة في عالم الخوادم

منذ ظهور Cron في نظام Unix أواخر السبعينيات وهو يُجدول مهام الخوادم: نسخ احتياطية في منتصف الليل، تنظيف ملفات مؤقتة كل ساعة، إرسال تقارير أسبوعية صباح الأحد. خمس خانات بسيطة فصلت بينها مسافات تختصر سنوات من الكود الذي لو كتبته بنفسك لاحتاج خيوطاً ومؤقّتات وحالات حواف لا تنتهي. ولأنّ كل بيئة حديثة — من خادم Linux صغير إلى AWS EventBridge و Kubernetes CronJob و GitHub Actions — تتحدّث «لغة Cron»، فإنّ إتقانها هو استثمار يدوم.

المشكلة الوحيدة: قراءة 0 */4 * * 1-5 ليست بديهية. هذه المقالة تشرح البنية الكاملة بالعربية، تفكّك كل خانة، تستعرض الأنماط الأكثر استخداماً، وتنبّهك للفروقات الخفيّة بين Linux و AWS و Spring قبل أن تكتشفها في الإنتاج.

بنية التعبير: خمس خانات وقاعدة واحدة

تعبير Cron القياسي خمس خانات تفصلها مسافات، بالترتيب التالي من اليسار إلى اليمين: الدقيقة ثم الساعةثم اليوم في الشهر ثم الشهر ثم اليوم في الأسبوع. القاعدة الذهبية: لو وضعت نجمة * في خانة فأنت تقول «كل القيم المسموحة». ولو وضعت رقماً محدّداً فأنت تقول «هذه القيمة فقط».

مثال: 30 14 * * * يعني الدقيقة 30 من الساعة 14 (يعني 2:30 ظهراً)، في أي يوم من أي شهر من أي يوم في الأسبوع — أي يومياً 2:30 ظهراً. أمّا 0 0 1 * * فالدقيقة صفر من الساعة صفر (منتصف الليل)، في اليوم الأول من الشهر، في أي شهر، في أي يوم أسبوع — أي بداية كل شهر.

العوامل الخمسة: نجمة، شرطة، فاصلة، شرطة-مائلة، وحرف L

داخل كل خانة يمكنك استخدام عدة عوامل تجعل التعبير أقوى بكثير من مجرد رقم واحد. أولاً النجمة * وتعني «كل القيم». ثانياً الشرطة - وتمثل مدى: 1-5 في خانة اليوم الأسبوعي تعني من الإثنين إلى الجمعة (في Linux القياسي حيث الأحد = 0). ثالثاً الفاصلة , للقيم المتعدّدة المنفصلة: 0,15,30,45 في خانة الدقيقة يعني أربع مرات في الساعة.

رابعاً الشرطة-المائلة / وهي الأهم عملياً: تعني «كل n». */15 في خانة الدقيقة يعني كل 15 دقيقة، */6 في خانة الساعة يعني كل 6 ساعات. ويمكن دمجها مع مدى: 0-30/5 يعني كل 5 دقائق لكن فقط في النصف الأول من الساعة. خامساً وأخيراً L (آخر) و W (أقرب يوم عمل) وهما إضافتان غير قياسية يدعمها Quartz و AWS لكن ليس Linux. L في خانة اليوم يعني آخر يوم في الشهر — مفيد لمهام نهاية الشهر دون عدّ 28 أو 30.

الاختلافات بين Linux و AWS و Spring/Quartz

ليس كل «Cron» متشابهاً. crontab في Linux يستخدم خمس خانات. AWS EventBridge و CloudWatch Events يستخدم ستّ خانات (يضيف خانة السنة في النهاية، ولا يقبل نجمة في كل من اليوم واليوم الأسبوعي معاً — يجب أن تضع? في إحداهما). Quartz (المستخدَم في Spring و ElasticSearch) يستخدم سبع خانات: الثانية + الدقيقة + الساعة + اليوم + الشهر + اليوم الأسبوعي + السنة، حيث الأحد = 1 وليس 0.

النتيجة: 0 9 * * 1 في Linux يعني الإثنين 9 صباحاً، لكن في Quartz يعني الأحد 9 صباحاً. وحين تنسخ تعبيراً من Stack Overflow تأكّد من بيئته. أداتنا أعلاه تستخدم لهجة Linux/Unix القياسية ذات الخمس خانات، وهي ما يدعمه Node.js (node-cron) و Vercel Cron و GitHub Actions و Kubernetes CronJob.

عشرة أنماط جدولة تغطي 90% من الاحتياجات

أكثر التعابير استخداماً في الإنتاج أبسط ممّا تتخيّل. * * * * *كل دقيقة (مفيد للاختبار، خطر في الإنتاج). */5 * * * *كل خمس دقائق (مناسب لـ health checks). 0 * * * *أعلى كل ساعة. 0 */6 * * * كل ست ساعات في الدقيقة صفر. 0 0 * * * منتصف كل ليلة (وقت ذهبي للنسخ الاحتياطية لأنّ الحمل أقل).

0 9 * * 0-4 أيام العمل في السعودية (الأحد للخميس) الساعة 9 صباحاً — مفيد لتقارير الصباح. 0 0 * * 0منتصف ليل الأحد (بداية الأسبوع في كثير من الشركات). 0 0 1 * *أول كل شهر — مناسب للفواتير وتقارير الشهر. 0 2 1 1 *أول كل سنة الساعة 2 فجراً — مناسب لـ archiving سنوي. 30 23 L * * آخر يوم في الشهر 11:30 مساءً (يتطلّب Quartz أو AWS).

فخّ المناطق الزمنية: السبب الأول لمهام تشتغل في وقت غريب

Cron نفسه لا يعرف المناطق الزمنية — يعرف فقط الوقت المحلّي للخادم. إذا كان خادمك يعمل بـ UTC وكتبت 0 9 * * *متوقّعاً أن تُرسَل التقارير 9 صباحاً بتوقيت الرياض، ستُرسَل الساعة 12 ظهراً. خادم AWS Lambda الافتراضي UTC. كثير من حاويات Docker كذلك. هذا أكثر مصدر «المهام تشتغل في وقت غريب».

الحل في ثلاث طبقات. أولاً: اضبط المنطقة الزمنية للخادم نفسه (TZ=Asia/Riyadh) — لكن هذا قد يكسر تطبيقات أخرى. ثانياً، الأفضل: استخدم مكتبة مثل node-cron أو cron-parser التي تقبل timezone كخيار مستقل عن وقت النظام. ثالثاً: في AWS EventBridge اضبط schedule_expression_timezone صراحة. الأداة أعلاه تتيح لك تجربة أي منطقة زمنية والاطّلاع على التشغيلات القادمة الفعلية.

اختبار التعبير قبل النشر: قاعدة لا تتنازل عنها

نشر تعبير Cron مكسور في الإنتاج يعني واحداً من سيناريوهَين: إمّا أنّه لن يعمل أبداً (وقد تكتشف ذلك بعد أسابيع حين يسأل أحد عن التقارير المفقودة)، أو سيعمل كثيراً جداً (وستفاجأ بفاتورة AWS مضاعفة). كلا السيناريوهَين كلفته أعلى من خمس دقائق اختبار مسبق.

ثلاث خطوات قبل أي نشر: (1) ألصق التعبير في الأداة أعلاه وتأكّد أنّ الوصف بالعربية يطابق نيّتك. (2) راجع التشغيلات العشرة القادمة — هل تبدو منطقية؟ هل المسافات بينها صحيحة؟ (3) في البيئة الفعلية، اجعل المهمة تكتب سطراً في log عند كل تشغيل ولو لأيام قليلة قبل تفعيلها فعلياً. هذه الدقائق توفّر أسابيع من التحقيق لاحقاً.

ستة أخطاء شائعة تجنّبها

أولاً: مهام طويلة بتكرار قصير. لو كتبت * * * * *لمهمة تستغرق 90 ثانية، ستبدأ النسخة الثانية قبل أن تنتهي الأولى — تراكم سريع وانهيار. استخدم قفلاً (flockأو سجلّ في قاعدة بيانات) أو زِد الفاصل. ثانياً: عدم تسجيل المخرجات. cron لا يطبع شيئاً افتراضياً؛ وجّه stdout و stderr إلى ملف log (>> /var/log/myjob.log 2>&1) وإلا ستفقد كل أثر للأخطاء.

ثالثاً: الاعتماد على متغيّرات بيئة المستخدم — Cron يعمل بـ PATH مبسّط جداً. استخدم مسارات مطلقة أو حدّد PATH في بداية الـ crontab. رابعاً: نسيان منطقة الخادم الزمنية (راجع القسم السابق). خامساً: تعابير معقّدة لا تحتاجها — لو احتجت «كل ثلاثاء وخميس» اكتب 0 9 * * 2,4، لا تعقّد الأمر. سادساً: عدم اختبار نهاية الشهر — فبراير 30 غير موجود؛ 0 0 30 * * سيتخطّى فبراير تماماً.

متى تترك Cron لأدوات أخرى

Cron عبقري في ما صُمّم له: مهام دورية على فواصل زمنية ثابتة. لكنّه ليس الأداة الصحيحة لكل شيء. لو احتجت تشغيلاً مرّة واحدة في المستقبل، استخدم at في Linux أو setTimeout في Node أو SQS Delayed Messages في AWS. لو احتجت مهام موزّعة عبر عدة خوادم مع ضمان «مرّة واحدة فقط»، استخدم نظام طوابير حقيقي (Sidekiq, BullMQ, Celery) لا Cron على كل خادم — وإلا ستُنفَّذ المهمة مرّات بعدد الخوادم.

ولو احتجت جدولة مرنة معقّدة (مهام تعتمد على نتائج مهام أخرى، إعادة محاولة بسياسة backoff، رسوم بيانية اعتمادية)، انتقل إلى أدوات workflow حقيقية مثل Airflow أو Temporal. Cron يبدأ يصبح عبئاً حين يتجاوز عددك مئات المهام أو حين تحتاج رؤية مركزية لها. القاعدة: ابدأ بـ Cron، انتقل لغيره حين يبدأ يؤلمك.

خلاصة

خمس خانات صغيرة، خمسة عوامل، وعشرة أنماط — هذا 90% ممّا ستحتاجه من Cron طوال حياتك المهنية. الباقي مجرد تنويعات على نفس الموضوع. القاعدة الأهم: لا تنشر تعبيراً لم تختبره مسبقاً، ولا تثق بالمنطقة الزمنية الافتراضية. الأداة أعلاه تتيح لك بناء أي تعبير بصرياً، قراءة وصفه بالعربية، ورؤية التشغيلات العشرة القادمة قبل أن تلمس crontab -e.

Cron في السحابة: من crontab إلى Managed Schedulers

في الـ 2026، قلّ ما تَجد فريقاً يَكتب في crontabمباشرةً على خادم إنتاجيّ. الأسباب: الخادم الواحد نقطة فشل، و تتبّع الفشل في /var/log/syslog مؤلم، و إعادة المحاولة عند الانقطاع غير مدمجة. البدائل السحابيّة الشائعة:

  • AWS EventBridge Scheduler — يَستقبل تعابير cron قياسيّة، يُشغّل Lambda أو ECS أو Step Functions، و يَدعم المناطق الزمنيّة و إعادة المحاولة المُكوّنة.
  • Google Cloud Scheduler — أرخص الخيارات (ثلاث وظائف مجّانيّة شهريّاً)، يُشغّل HTTP endpoints أو Pub/Sub أو Cloud Run.
  • Vercel Cron Jobs — جدولة API routes في Next.js مباشرةً عبر vercel.json. مثالي لمواقع ثابتة تحتاج تحديثاً يوميّاً.
  • GitHub Actions schedule — مجّاني للمستودعات العامّة، يَكفي لمهام DevOps الخفيفة (تنظيف branches، تحديث dependencies).

ميزة هذه الخدمات أنّها تُخزّن نتيجة كلّ تشغيل، تُرسل تنبيهات عند الفشل، و تُعيد المحاولة تلقائيّاً وفق سياسة backoff. تَعبير cron الذي بَنيته هنا يَنتقل كما هو — لكن خلفه بنية تحتيّة كاملة بدل خادم وحيد. للفرق السعوديّة على Vercel أو AWS الرياض، هذه الطبقة تَختصر ساعات من تجهيز systemd timers و monitoring.

أدوات ذات صلة

أدوات أخرى مجانية على ArabToolBox، كلها تعمل في متصفّحك بدون تسجيل.

أسئلة شائعة

ما هو Cron Expression بالضبط؟

تعبير Cron نصّ من خمس خانات تفصلها مسافات يُخبر جدولة المهام متى يُشغّل أمراً ما. الخانات بالترتيب: الدقيقة (0-59)، الساعة (0-23)، اليوم في الشهر (1-31)، الشهر (1-12)، اليوم في الأسبوع (0-7 حيث 0 و 7 كلاهما الأحد في Linux). نجمة (*) تعني «كل القيم» في تلك الخانة. مثال: 0 9 * * 1-5 يعني الساعة 9 صباحاً من الإثنين إلى الجمعة. لمسة قصيرة لكنّها لغة عالمية يفهمها كل نظام جدولة حديث تقريباً.

ما الفرق بين Cron في Linux و AWS و Spring؟

Linux/Unix القياسي يستخدم خمس خانات. AWS EventBridge و CloudWatch يستخدمان ستّ خانات (يضيفان السنة في النهاية، ولا يقبلان نجمة في كل من اليوم واليوم الأسبوعي معاً — يجب وضع علامة استفهام في إحداهما). Spring/Quartz يستخدم سبع خانات (الثانية + الخمس القياسية + السنة)، وفيه الأحد = 1 وليس 0. النتيجة: 0 9 * * 1 في Linux يعني الإثنين 9 صباحاً، لكنه في Quartz يعني الأحد 9 صباحاً. أداتنا تستخدم اللهجة الخماسيّة القياسيّة وهي ما تدعمه Vercel Cron و GitHub Actions و Kubernetes CronJob و node-cron.

هل Cron يعمل بشكل صحيح مع التوقيت الصيفي (DST)؟

السعودية لا تطبّق التوقيت الصيفي إطلاقاً، لذا المنطقة الزمنية Asia/Riyadh آمنة تماماً. لكن لو كنت تستهدف مستخدمين في أوروبا أو أمريكا، فـ Cron قد يتخطّى ساعة كاملة عند الانتقال للتوقيت الصيفي، أو يُشغّل المهمة مرّتين عند العودة منه. الحل: استخدم UTC للمهام الحرجة (لا تتأثّر بـ DST)، أو استخدم مكتبة مثل cron-parser تعرف كيف تتعامل مع DST بشكل صحيح، أو ضع المهام الحسّاسة في أوقات بعيدة عن نقاط الانتقال (لا تجدول شيئاً الساعة 2-3 فجراً في أوروبا).

لماذا 0 0 * * 0 يعمل الأحد وليس السبت؟

في Linux/Unix القياسي، اليوم الأسبوعي يبدأ من الأحد = 0 (وبعض الإصدارات تقبل 7 أيضاً للأحد). السبت = 6. لذا في السياق السعودي حيث أسبوع العمل من الأحد للخميس، الإثنين إلى الجمعة = 1-5، وأيام العمل السعودية = 0-4 (الأحد-الخميس). هذا الاختلاف عن المعيار «الإثنين أول الأسبوع» يربك كثيرين. أداتنا تستخدم نفس النظام (الأحد = 0)، وتعرض الوصف بالعربية لتأكيد فهمك.

ما الفرق بين */5 و 0,5,10,15,20,25,30,35,40,45,50,55 في خانة الدقيقة؟

لا فرق وظيفيّ — كلاهما يعني «كل خمس دقائق». الأول مختصر وأنيق، الثاني صريح. لكن انتبه: */5 يُحسب من الصفر دائماً، فلو أردت «كل خمس دقائق بدءاً من الدقيقة 2» (يعني 2, 7, 12, 17...) لا يمكنك كتابتها بـ */5، يجب الكتابة الصريحة. كذلك */7 لا يقسم 60 بالتساوي، فستحصل على 0, 7, 14, 21, 28, 35, 42, 49, 56، ثم يعود لـ 0 (فاصل 4 دقائق فقط بين 56 و 0!) — لذا تجنّب الكسور التي لا تقسم 60.

ما أفضل الأدوات لاختبار تعابير Cron قبل النشر؟

ثلاث خطوات لا تتنازل عنها: (1) ألصق التعبير في الأداة أعلاه وراجع الوصف العربي والتشغيلات العشرة القادمة — هل تطابق نيّتك؟ (2) في بيئة staging، اجعل المهمة تكتب سطراً في log عند كل تشغيل لمدّة 24-48 ساعة قبل التفعيل الفعلي. (3) للمهام الحرجة، استخدم خدمة dead man’s switch (مثل Healthchecks.io) ترسل تنبيهاً لو لم تُشغَّل المهمة في الوقت المتوقّع. هذه الثلاث خطوات توفّر أسابيع من التحقيق لاحقاً حين تكتشف أنّ التقارير الأسبوعية لم تُرسَل منذ شهر.

قراءات ذات صلة

مقالات وأدلّة مرتبطة بنفس الموضوع على ArabToolBox.

أدوات قد تهمّك