شرح تعابير cron

تعبير cron سلسلة من خمسة حقول — الدقيقة والساعة ويوم الشهر والشهر ويوم الأسبوع — تخبر المجدوِل بموعد تشغيل مهمة. تعتمد الصياغة نفسها في crontab على لينكس، وCronJobs في Kubernetes، وجدولات GitHub Actions، ومشغّلات cron في Cloudflare Workers، وAWS EventBridge، ومعظم أنظمة CI، لذا فإن قراءتها وكتابتها مهارة تستخدمها في كل مكان.

يستعرض هذا الدليل كل حقل ومعامل، ويقدّم الجدولات التي يبحث عنها الناس أكثر، ويشرح الفخاخ — المناطق الزمنية، ويوم الشهر مقابل يوم الأسبوع، وحقل الثواني الإضافي في بعض الأنظمة — التي تجعل المهمة تعمل في الوقت الخطأ أو لا تعمل أصلاً.

الحقول الخمسة

┌───────────── minute        (0–59)
│ ┌─────────── hour          (0–23)
│ │ ┌───────── day of month  (1–31)
│ │ │ ┌─────── month         (1–12 or JAN–DEC)
│ │ │ │ ┌───── day of week   (0–6, Sunday = 0, or SUN–SAT)
│ │ │ │ │
* * * * *   → every minute
30 2 * * *  → at 02:30 every day
0 9 * * 1-5 → at 09:00 Monday to Friday

جرّبها: شارح تعابير cron

المعاملات: * و/ و- و,

  • * (النجمة) — كل قيمة. * في حقل الساعة تعني كل ساعة.
  • , (الفاصلة) — قائمة. 0,30 في حقل الدقيقة تعني عند الدقيقة 0 والدقيقة 30.
  • - (الشرطة) — نطاق. 9-17 في حقل الساعة تعني 9 و10 و… و17.
  • / (الشرطة المائلة) — خطوة. ‎*/15 في حقل الدقيقة تعني كل 15 دقيقة (0 و15 و30 و45)؛ و1-31/2 تعني كل يومين.
  • الأسماء — تُقبل JAN–DEC وSUN–SAT في معظم التطبيقات وهي أسهل في القراءة من الأرقام.
  • الامتدادات — تقبل بعض المجدوِلات L (الأخير) وW (أقرب يوم عمل) و# (اليوم الأسبوعي رقم n) و? — وهذه ميزات Quartz/Spring لا cron القياسي.

جرّبها: مولّد تعابير cron

جدولات شائعة

*/5 * * * *      every 5 minutes
0 * * * *        every hour, on the hour
0 */6 * * *      every 6 hours (00:00, 06:00, 12:00, 18:00)
0 0 * * *        every day at midnight
0 9 * * 1-5      weekdays at 09:00
0 9 * * 1        every Monday at 09:00
0 0 1 * *        first day of every month at midnight
0 0 1 1 *        once a year, 1 January
30 23 * * 0      Sundays at 23:30
0 8,20 * * *     twice a day, 08:00 and 20:00
15 3 */2 * *     every second day at 03:15
0 0 * * 5        every Friday at midnight

جرّبها: مولّد تعابير cron جرّبها: مدقّق تعابير cron

المناطق الزمنية: أكثر أخطاء cron شيوعاً

ليس لتعبير cron منطقة زمنية خاصة به؛ فهو يعمل في المنطقة التي يستخدمها المجدوِل. يستخدم crontab في لينكس منطقة النظام، ويستخدم Kubernetes وCloudflare Workers التوقيت العالمي UTC، وكذلك GitHub Actions، وتختلف الخدمات السحابية. المهمة المقصود تشغيلها الساعة 09:00 بتوقيت الرياض (UTC+3) يجب أن تُكتب 0 6 * * * على مجدوِل بتوقيت UTC — والساعة 09:00 في منطقة تطبّق التوقيت الصيفي تنزاح ساعة مرتين في السنة. وثّق المنطقة الزمنية دائماً بجوار التعبير وحوّل صراحةً.

جرّبها: محوّل المناطق الزمنية

يوم الشهر مقابل يوم الأسبوع

عندما يكون حقلا اليوم مقيّدين معاً، يشغّل cron القياسي المهمة إذا تطابق أحدهما (OR) لا كلاهما. يعمل 0 0 13 * 5 في كل يوم 13 وفي كل يوم جمعة، لا في يوم الجمعة الموافق 13 فقط. وللتعبير عن «ثاني ثلاثاء في الشهر» أو «آخر يوم في الشهر» تحتاج إلى امتدادات على طريقة Quartz أو فحص صغير داخل المهمة نفسها.

جرّبها: شارح تعابير cron

cron بستة حقول ونسخ أخرى

  • تضع Quartz وSpring وبعض مجدوِلات Java حقل الثواني أولاً: 0 */5 * * * ? — ستة أو سبعة حقول. لصق تعبير من خمسة حقول هناك يزيح كل حقل بمقدار واحد.
  • تستخدم Cloudflare Workers وKubernetes وGitHub Actions وVercel الحقول الخمسة القياسية.
  • تقبل بعض الأنظمة @hourly و@daily و@weekly و@monthly و@yearly كاختصارات.
  • أدنى دقة هي دقيقة واحدة؛ والجدولات دون الدقيقة تحتاج إلى آلية مختلفة.

جرّبها: مدقّق تعابير cron

اختبار تعبير cron

قبل النشر، الصق التعبير في أداة تحقق تعرض أوقات التشغيل القادمة في منطقتك الزمنية. تأكد من أن أول تشغيل في الوقت المتوقع، وأن الفاصل بين التشغيلات صحيح، وأن حالات نهاية الشهر وعطلة نهاية الأسبوع تتصرف كما ينبغي. ثم اجعل المهمة نفسها متساوية القوى (idempotent) — آمنة للتشغيل مرتين — لأن كل مجدوِل سيشغّلها مرتين أو يتخطاها مرة في نهاية المطاف.

جرّبها: مدقّق تعابير cron جرّبها: محوّل طوابع Unix الزمنية

الأسئلة الشائعة

ماذا يعني * * * * * في cron؟

كل دقيقة من كل ساعة من كل يوم. تعني كل نجمة «كل قيمة» في حقلها.

كيف أشغّل مهمة cron كل 5 دقائق؟

استخدم ‎*/5 * * * *. يعمل معامل الخطوة في حقل الدقيقة عند 0 و5 و10 … و55.

كيف أجدول مهمة كل يوم اثنين الساعة 9 صباحاً؟

0 9 * * 1 — الدقيقة 0، والساعة 9، وأي يوم من الشهر، وأي شهر، ويوم الأسبوع 1 (الاثنين).

هل الأحد 0 أم 7 في cron؟

كلاهما يعمل في معظم التطبيقات: 0 و7 يعنيان الأحد. استخدم SUN إذا كان المجدوِل يقبل الأسماء لتجنب اللبس.

أي منطقة زمنية يستخدم cron؟

المنطقة التي ضُبط عليها المجدوِل — منطقة النظام في crontab، وUTC في Kubernetes وGitHub Actions وCloudflare Workers. حوّل توقيتك المحلي إلى تلك المنطقة عند كتابة التعبير.

لماذا لا تعمل مهمة cron الخاصة بي؟

الأسباب المعتادة: التعبير في المنطقة الزمنية الخطأ، أو أُعطي تعبير من ستة حقول لمجدوِل بخمسة حقول (أو العكس)، أو أن حقلي يوم الشهر ويوم الأسبوع يتحدان بـ OR، أو أن المهمة تعمل لكنها تفشل بصمت — راجع سجلات المجدوِل ومعاينة التشغيل القادم.

الأدوات المذكورة في هذا الدليل

أدلة أخرى

أدلة أخرى →
JSON والبيانات

ما هو JSON؟

شرح JSON بلغة مبسّطة: ما هو، وأنواع القيم الست، وقواعد الصياغة التي يخطئ فيها الكثيرون، وكيفية تنسيقه والتحقق منه، ومقارنته بـ XML وYAML.

وقت القراءة 4 دقائق
اختبار واجهات API

ما هو اختبار API؟ وكيف تختبر REST API

شرح اختبار API: ما هو، وما الذي تفحصه في كل طلب واستجابة، وطريقة خطوة بخطوة لاختبار REST API، والأخطاء الشائعة، وأدوات مجانية من متصفحك.

وقت القراءة 5 دقائق
تصميم الاختبارات

كيف تكتب حالات الاختبار (Test Cases)

كيف تكتب حالات اختبار موثوقة: الحقول التي تحتاجها كل حالة، ونموذج جاهز للنسخ، ومثال تسجيل الدخول، وتقنيات التصميم التي تكتشف الأخطاء الحقيقية.

وقت القراءة 4 دقائق
الأمان

ما هو JWT؟ شرح رموز JSON Web Token

شرح مبسّط لـ JWT: الأجزاء الثلاثة للرمز، والمطالبات مثل exp وsub، وكيفية فك ترميزه والتحقق منه، ولماذا فك الترميز ليس تحققاً، وقواعد الأمان.

وقت القراءة 4 دقائق
الترميز

ما هو Base64؟ شرح الترميز

شرح Base64: ما هو وما ليس هو، وكيف يعمل الترميز، ولماذا يكبر الناتج بالثلث، والفرق بين Base64 وBase64URL، وحشو =، وكيفية الترميز وفك الترميز.

وقت القراءة 4 دقائق
أدوات مساعدة

ما هو UUID؟ الفرق بين v4 وv7 وبين UUID وGUID وULID

شرح UUID: صيغة الـ 128 بت، والفرق بين v4 وv7، ولماذا v7 أفضل لمفاتيح قواعد البيانات، ومقارنة UUID بـ GUID وULID، واحتمال التصادم، والتوليد والتحقق.

وقت القراءة 4 دقائق