مولد crontab ومنشئ تعبير cron
أنشئ تعبيرات cron وتحقق منها وفُكَّها داخل متصفحك. معاينة مباشرة للتشغيل التالي بالتوقيت المحلي أو UTC. صيغة POSIX من خمسة حقول، قوالب جاهزة، ووصف بلغة طبيعية. مجاني، خاص، بلا تسجيل.
بلغة طبيعية
—
أقرب 5 عمليات تشغيل مجدولة
ما تعبير cron؟
تعبير cron هو سلسلة من خمسة حقول تُعرّف جدولاً متكرراً. من اليسار إلى اليمين، الحقول هي الدقيقة (0-59)، الساعة (0-23)، يوم الشهر (1-31)، الشهر (1-12)، ويوم الأسبوع (0-6، حيث يعني كلٌّ من 0 و7 الأحد). يقبل كل حقل قيمة، أو قائمة (`1,3,5`)، أو نطاقاً (`1-5`)، أو رمزاً عاماً (`*` أي قيمة)، أو خطوة (`*/15` كل 15). يُعرّف الاجتماع متى يعمل الأمر المجدول بالضبط — `0 9 * * 1-5` مثلاً يُقرأ «عند الدقيقة 0، الساعة 9، أي يوم من الشهر، أي شهر، يوم الأسبوع من الإثنين حتى الجمعة» — بلغة طبيعية «أيام الأسبوع في 9:00 صباحاً».
ظهر cron في Unix Version 7 عام 1979 وبقيت قواعد الحقول الخمسة دون تغيير يُذكر لأكثر من أربعة عقود — شهادة على جودة الصيغة الأصلية. اليوم تُستخدم تعبيرات cron بعيداً عن ملف crontab في Unix: Kubernetes CronJobs، وسير عمل GitHub Actions، وقواعد AWS EventBridge، وأنابيب GitLab CI المجدولة، وCloudflare Workers Cron Triggers، ومنصات بلا خادم في كل سحابة — جميعها تقبل القواعد ذاتها بخمسة حقول. تعلّم cron مرة يعني معرفة كيفية جدولة المهام في كل سياق بنية تحتية حديث.
يعرّف معيار POSIX خمسة عوامل: `*` (أي قيمة)، و`,` (قائمة قيم)، و`-` (نطاق)، و`/` (خطوة)، ورموز مسماة للأشهر (JAN-DEC) وأيام الأسبوع (SUN-SAT). تُمدّد معظم التطبيقات أيضاً خمسة اختصارات شائعة: `@yearly` (`0 0 1 1 *`)، و`@monthly` (`0 0 1 * *`)، و`@weekly` (`0 0 * * 0`)، و`@daily` (`0 0 * * *`)، و`@hourly` (`0 * * * *`). يُمدّد مُجدول Quartz (مكتبة Java) ذلك بحقل ثواني اختياري وعوامل إضافية (`?`، `L`، `W`، `#`) — مفيد لو تعمل في Java/Spring، لكنه غير قابل للنقل إلى cron القياسي. تتبع هذه الأداة معيار POSIX ذا الحقول الخمسة لأنه المتغير الغالب وما سيفهمه فعلياً خادم Linux الخاص بك، ومشغل GitHub Actions، وعنقود Kubernetes.
تستحق إحدى غرائب POSIX cron عناية خاصة: حين يكون كلٌّ من يوم الشهر ويوم الأسبوع مقيَّداً (لا أحد منهما `*`)، يعمل الجدول حين يطابق أيُّهما — دلالة «أو»، لا «و». فـ`0 0 1 * 5` يعمل في الأول من كل شهر وفي كل يوم جمعة، لا الجُمَع التي تصادف الأول فقط. هذه أكثر مفاجآت cron شيوعاً؛ تجعلها معاينة التشغيل التالي واضحة بإظهار المواعيد الفعلية التي سينطلق فيها الجدول. تحقّق قبل النشر.
يجري كل التحليل وحساب التشغيل التالي بالكامل في متصفحك باستخدام JavaScript — لا تُرسَل أي تعبيرات أو جداول أو أي بيانات أخرى إلى أي خادم. تحلل هذه الأداة أي تعبير POSIX cron قياسي فوراً بوصف بلغة طبيعية ومعاينة لخمس عمليات تشغيل، بخصوصية كاملة.
تعبيرات cron مرتبطة وثيقاً بأدوات مطورين أخرى. تُصحَّح مهام cron عادةً بفحص طوابع زمنية Unix مقابل أوقات التشغيل المتوقعة، وتُوثَّق الجداول المعقدة كثيراً بصيغة JSON التي يمكن التحقق منها عبر منسق JSON لدينا. للحصول على دليل معمق يغطي دلالة «أو»، ومزالق المناطق الزمنية، ومتغيرات cron الشائعة بأمثلة في Linux وKubernetes وGitHub Actions، اقرأ مرجع جداول cron.
# Linux crontab entry — runs every 15 minutes
*/15 * * * * /usr/local/bin/poll-api.sh
# Kubernetes CronJob — weekdays at 9:00 AM UTC
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-report
spec:
schedule: "0 9 * * 1-5"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: report-runner:1.0
restartPolicy: OnFailure
# GitHub Actions workflow — hourly
on:
schedule:
- cron: '0 * * * *'
# AWS EventBridge — first of each month
ScheduleExpression: cron(0 0 1 * ? *)
# (Note: AWS uses the Quartz 6-field form with '?' for day-of-week) الميزات الرئيسية
محلل POSIX حي بخمسة حقول
محلل صارم يتبع POSIX cron: الدقيقة (0-59)، الساعة (0-23)، يوم الشهر (1-31)، الشهر (1-12 أو JAN-DEC)، يوم الأسبوع (0-6 أو SUN-SAT، مع قبول 7 أيضاً للأحد). كل العوامل القياسية (`*` `,` `-` `/`) والماكروات (`@yearly` `@monthly` `@weekly` `@daily` `@hourly`) مدعومة.
معاينة أقرب 5 عمليات تشغيل
تحسب أقرب خمسة أوقات تشغيل مجدولة من وقتك المحلي الحالي. بدّل بين المحلي وUTC بنقرة واحدة — الطريقة الأكثر موثوقية لاكتشاف مفاجآت المناطق الزمنية قبل نشر crontab إلى خادم في منطقة مختلفة.
وصف بلغة طبيعية
كل تعبير صالح يحظى بشرح بلغة طبيعية: «كل 15 دقيقة»، «أيام الأسبوع في 9:00 صباحاً»، «في 02:30 من اليوم 1 من الشهر، في يناير ويوليو». يجعل مراجعة الكود وتسليم الفريق بلا عناء — لا مزيد من تخمين ما يفعله `*/5 9-17 * * 1-5` فعلياً.
رسائل خطأ على مستوى الحقل
تحظى التعبيرات غير الصالحة بتغذية راجعة حمراء فورية مع تظليل الحقل المخالف وخطأ محدد: «Error in minute: value out of range [0, 59]: "60"». لا مزيد من إخفاقات crontab الصامتة التي تُكتشَف بعد ثلاثة أيام حين لم يعمل التقرير.
شرائح قوالب للجداول الشائعة
إحدى عشرة قالباً بنقرة واحدة تغطي الجداول التي ستستخدمها فعلاً: كل دقيقة، وكل 5/15 دقيقة، وكل ساعة، ويومياً عند منتصف الليل أو 9 صباحاً، وأيام الأسبوع في 9 صباحاً، وأسبوعياً يوم الأحد/الإثنين، وأول كل شهر، وسنوياً. انقر، اضبط، انشر.
حقول إدخال لكل موضع
لا تحفظ ترتيب الحقول الخمسة — خمسة حقول صغيرة معنونة الدقيقة والساعة ويوم الشهر والشهر ويوم الأسبوع تتيح لك تعديل موضع واحد في كل مرة دون إسقاط قيمة أو سوء ترتيب. التعبير الكامل في الأعلى يُعاد بناؤه تلقائياً.
دلالة «أو» في POSIX بشكل صحيح
حين يُقيَّد كلٌّ من يوم الشهر ويوم الأسبوع، تُطبَّق قاعدة «أو» — `0 0 1 * 5` يعمل في كل أول شهر وفي كل يوم جمعة. تجعل معاينة التشغيل التالي هذا مرئياً قبل النشر؛ لا مزيد من رسائل عطلة نهاية الأسبوع المفاجئة.
خصوصية 100٪ في المتصفح
تعبيرات cron الخاصة بك — التي تكشف غالباً توقيت البنية التحتية وأنماط الجدولة الداخلية — لا تغادر متصفحك أبداً. لا تُرسَل أي بيانات إلى أي خادم، ولا تسجيل، ولا تحليلات. يمكنك التحقق من ذلك في تبويب الشبكة في متصفحك. آمن لجداول الإنتاج والأنظمة الداخلية.
رسائل خطأ واعية بـ Quartz
إن لصقت تعبير Quartz به `?` أو `L` أو `W` أو `#`، يشرح المحلل «Quartz operators not supported — use POSIX syntax» لتعرف أن تعيد الكتابة لـcron بدلاً من تتبع إخفاق صامت. جداول Quartz لا تعمل على cron في Linux.
متغيرات cron والمُجدولات
<bdi>Vixie</bdi> <bdi>cron</bdi> (افتراضي <bdi>Linux</bdi>)
<bdi>POSIX</bdi> بخمسة حقولالافتراضي في معظم توزيعات <bdi>Linux</bdi>. <bdi>POSIX</bdi> صارم مع امتداد <bdi>`CRON_TZ=`</bdi> للمنطقة الزمنية الصريحة. تنطبق دلالة «أو» بين يوم الشهر ويوم الأسبوع. الهدف الأساسي لهذه الأداة.
BSD cron
<bdi>POSIX</bdi> بخمسة حقولالافتراضي في <bdi>macOS</bdi> وعائلة <bdi>BSD</bdi>. متوافق مع <bdi>POSIX</bdi> مع فروق طفيفة في التطبيق عن <bdi>vixie cron</bdi>؛ تعمل معظم التعبيرات بنفس الشكل.
مؤقتات <bdi>systemd</bdi> (<bdi>OnCalendar</bdi>)
مواصفة تقويم، لا <bdi>cron</bdi>بديل لـ<bdi>cron</bdi> على <bdi>Linux</bdi> القائم على <bdi>systemd</bdi>. يستخدم صيغة <bdi>`OnCalendar: 2026-*-* 09:00:00`</bdi> — أكثر قراءة للجداول غير المتكررة لكنه غير قابل للتشغيل البيني مع تعبيرات <bdi>cron</bdi>.
Quartz Scheduler (Java/Spring)
6 أو 7 حقوليضيف حقول الثواني (إلزامية) والسنة (اختيارية)، مع عوامل <bdi>`?`</bdi> و<bdi>`L`</bdi> و<bdi>`W`</bdi> و<bdi>`#`</bdi>. مفيد لتطبيقات <bdi>Java</bdi> لكنه غير قابل للنقل إلى <bdi>cron</bdi> في <bdi>Linux</bdi>.
AWS EventBridge
<bdi>Quartz</bdi> بستة حقول مع `?`يتطلب أن يكون يوم الأسبوع أو يوم الشهر <bdi>`?`</bdi> (اتفاق <bdi>Quartz</bdi>) لا <bdi>`*`</bdi> حين يكون أحدهما فقط مقيَّداً. التعبيرات لا تُنقَل مباشرة إلى <bdi>cron</bdi> في <bdi>Linux</bdi>.
Kubernetes CronJob
<bdi>POSIX</bdi> بخمسة حقول + حقل <bdi>timeZone</bdi>جدول <bdi>POSIX</bdi> بخمسة حقول مع حقل <bdi>`spec.timeZone`</bdi> (1.27+). أنظف من الاعتماد على منطقة مضيف <bdi>kubelet</bdi>. التعبيرات تُنقَل مباشرة من <bdi>cron</bdi> في <bdi>Linux</bdi>.
GitHub Actions
<bdi>POSIX</bdi> بخمسة حقوليعمل دوماً بـ<bdi>UTC</bdi>. توقيت بأفضل جهد — قد يُتخطّى تحت الحِمل العالي. تجنّب الفترات الأقصر من 15 دقيقة. التعبيرات تُنقَل مباشرة من <bdi>cron</bdi> في <bdi>Linux</bdi>.
أمثلة على تعبيرات cron
كل 15 دقيقة
*/15 * * * *
عامل الخطوة: `*/15` في حقل الدقيقة يعني «كل 15 دقيقة بدءاً من الدقيقة 0» — فالتشغيل عند :00 و:15 و:30 و:45 من كل ساعة في كل يوم. أكثر فترة شائعة لاستطلاع واجهات API وتحديث الذواكر المخبأة وفحوص النبض.
أيام الأسبوع في الساعة 9:00 صباحاً
0 9 * * 1-5
النطاق `1-5` في حقل يوم الأسبوع يعني الإثنين حتى الجمعة (1=الإثنين، 5=الجمعة). يعمل في الساعة 09:00 بالضبط — مفيد لتقارير ساعات العمل، والمهام الدفعية المعتمدة على بيانات ليلية، وتذكيرات الاجتماع اليومي.
اليوم الأول من كل شهر عند منتصف الليل
0 0 1 * *
يوم الشهر `1`، وكل الحقول الأدنى صفر. شائع للفوترة الشهرية، وتدوير السجلات، وتسوية نهاية الفترة. حقلا يوم الشهر ويوم الأسبوع يُقيَّدان معاً فقط حين لا يكون أيٌّ منهما `*` — وهنا يوم الأسبوع `*`، فيهم يوم الشهر وحده.
كل 5 دقائق بين 9 صباحاً و5 مساءً، أيام الأسبوع
*/5 9-17 * * 1-5
يجمع بين الخطوة (`*/5`) والنطاق (`9-17`) في حقلين مختلفين. مفيد للرصد المقتصر على ساعات العمل أو إفراغ الطوابير. الإجمالي: 12 تشغيلاً/ساعة × 9 ساعات × 5 أيام = 540 تشغيلاً في أسبوع العمل.
ربع سنوي: الأول من يناير وأبريل ويوليو وأكتوبر عند منتصف الليل
0 0 1 JAN,APR,JUL,OCT *
أسماء أشهر في قائمة مفصولة بفواصل. جداول ربع سنوية مثل الإقفال المالي، ومراجعات تجميد الكود، وعمليات تدقيق الامتثال. يمكن مزج الأسماء والأرقام (`1,APR,7,10` يُحلَّل بنفس الشكل)، لكن التزم بأسلوب واحد للوضوح.
مأزق «أو» في POSIX: الأول من الشهر أو كل جمعة
0 0 1 * 5
حين يكون كلٌّ من يوم الشهر (`1`) ويوم الأسبوع (`5`) مقيَّداً، يشغّل POSIX cron المهمة إذا طابق أيُّهما. فهذا يعمل في اليوم الأول من كل شهر وفي كل يوم جمعة — لا الجُمَع التي تصادف الأول فقط. هذه أكثر مفاجآت cron شيوعاً؛ معاينة التشغيل التالي تجعلها واضحة.
كل يوم في الساعة 02:30 (نافذة قليلة الحركة)
30 2 * * *
قيم محددة للساعة والدقيقة، ورموز عامة في البقية. نافذة 02:00-04:00 UTC هي الاتفاق الفعلي للمهام الدفعية الليلية لأنها لا تتقاطع مع ساعات عمل أي منطقة أعمال كبرى. اقرنها بمفتاح UTC للتأكد من أن التشغيل يقع حيث تتوقع.
مكافئ الماكرو: @daily
@daily
اختصار `@daily` (وأيضاً `@midnight`) يتمدد إلى `0 0 * * *` — كل يوم عند منتصف الليل. ماكروات أخرى: `@yearly` = `0 0 1 1 *`، `@monthly` = `0 0 1 * *`، `@weekly` = `0 0 * * 0`، `@hourly` = `0 * * * *`. الماكروات مختصرة، لكن صيغة الحقول الخمسة أكثر قابلية للنقل عبر المُجدولات (بعضها يدعم الماكروات وبعضها لا).
كيف تبني تعبير cron
- 1
اكتب أو الصق تعبير cron
أدخل تعبير cron بخمسة حقول في حقل الإدخال أعلاه (مثلاً `*/15 * * * *`). تحلل الأداة وتتحقق أثناء كتابتك — علامة خضراء للصالح، وخطأ أحمر مع اسم الحقل لغير الصالح. الماكروات مثل `@daily` و`@hourly` ونحوها مقبولة أيضاً.
- 2
أو اضبط حقول الإدخال الخمسة
لا تحفظ ترتيب الحقول — حرّر الدقيقة أو الساعة أو يوم الشهر أو الشهر أو يوم الأسبوع منفرداً عبر الحقول المعنونة. التعبير الكامل في الأعلى يتحدث تلقائياً. استخدم `*` للرموز العامة، و`*/N` للخطوات، و`a-b` للنطاقات، و`1,3,5` للقوائم.
- 3
اختر قالباً للانطلاق السريع
اضغط أي شريحة قالب (كل 15 دقيقة، أيام الأسبوع في 9 صباحاً، إلخ) لتحميل جدول شائع، ثم اضبط الحقول لتلائم حاجتك الدقيقة. تغطي إحدى عشرة قالباً الأنماط التي ستستخدمها فعلاً في الإنتاج.
- 4
تحقق من معاينة التشغيل التالي
انظر إلى المواعيد الخمسة القادمة — بدّل بين المحلي وUTC للتأكد من أن الجدول ينطلق حيث تنوي. هذه أكثر طريقة موثوقية لاكتشاف مأزق «أو» بين يوم الشهر ويوم الأسبوع في POSIX قبل أن يلدغك في الإنتاج.
- 5
انسخ والصق إلى مُجدولك
انقر «نسخ» لأخذ التعبير. الصقه في crontab الخاص بك أو مؤقت systemd أو cron: في GitHub Actions أو AWS EventBridge أو schedule في Kubernetes CronJob أو أي مُجدول متوافق مع cron. لا تنسَ التحقق من المنطقة الزمنية للمُجدول المستهدف — انظر قسم أفضل الممارسات أدناه.
أخطاء cron الشائعة
فخ «أو» في POSIX: تقييد كلا حقلي اليوم
حين يكون كلٌّ من يوم الشهر ويوم الأسبوع مقيَّداً، يشغّل POSIX cron المهمة إذا طابق أيُّهما — لا كلاهما. فـ`0 0 1 * 5` ينطلق في الأول من كل شهر وفي كل يوم جمعة، لا الجُمَع التي تصادف الأول فقط. استخدم `*` في أحد حقلي اليوم حين تريد شرطاً واحداً، أو اكتب سكربت غلاف يجري فحص «و».
# المقصود: «أول جمعة من الشهر» 0 0 1-7 * 5 # فعلياً: ينطلق في الأيام 1-7 من الشهر أو في كل جمعة — كلا الشرطين
# استخدم غلافاً لدلالة «و» الحقيقية 0 0 * * 5 [ $(date +\%d) -le 7 ] && /your-script # أو اطرح أحد الشرطين واقبل الجدول الأوسع
انحراف المنطقة الزمنية بين التطوير والإنتاج
تستخدم جداول cron على خادم Linux منطقة النظام الزمنية، لا منطقة الكاتب المحلية. cron في 9:00 صباحاً على خادم مضبوط على UTC ينطلق في 4:00 صباحاً بتوقيت شرق الولايات المتحدة. صمّم الجداول دائماً مقابل منطقة الخادم المستهدف — يُفضَّل UTC — وثبّت المنطقة صراحة بـ`CRON_TZ=...` أعلى crontab.
# كتبه مطور بتوقيت شرق الولايات المتحدة، ونُشر على خادم UTC 0 9 * * * /your-report.sh # ينطلق في 9 صباحاً UTC = 4 صباحاً بتوقيت الشرق — لم يكن هذا قصد المطور
# ثبّت المنطقة، أو اكتب بـ UTC صراحة CRON_TZ=America/New_York 0 9 * * * /your-report.sh
التباس عامل الخطوة: '*/15' مقابل '15'
`*/15` في الدقيقة يعني «كل 15 دقيقة بدءاً من 0» (أي 0 و15 و30 و45). أما `15` وحده فيعني «عند الدقيقة 15 فقط» — تشغيل واحد في الساعة. كثيراً ما يكتب المبتدئون `15` ظناً أنها كل 15 دقيقة؛ يجعل الوصف بلغة طبيعية في الأداة الخطأ واضحاً قبل النشر.
# المقصود: كل 15 دقيقة 15 * * * * # فعلياً: مرة في الساعة، عند الدقيقة 15 (4 تشغيلات/ساعة أقل من المقصود)
# الصحيح */15 * * * * # كل 15 دقيقة: الدقيقة 0 و15 و30 و45 من كل ساعة
تعبير بستة حقول على مُجدول POSIX
يدعم Quartz/Spring/node-cron حقل ثواني اختيارياً في الموضع الأول. لا تدعمه crontab على Linux ولا GitHub Actions ولا AWS EventBridge (في الغالب) ولا Kubernetes CronJob — تتوقع خمسة حقول. لصق تعبير بستة حقول يكسر الجدول صامتاً: تصبح ثوانيك دقائق، ودقائقك ساعات، إلخ.
# Quartz بستة حقول نُسخ إلى crontab على Linux 0 0 9 * * 1-5 # يقرأ Linux: الدقيقة=0، الساعة=0، يوم الشهر=9، الشهر=*، يوم الأسبوع=1-5 # = منتصف الليل في اليوم 9 من أشهر تطابق أيام الأسبوع — فوضى
# POSIX بخمسة حقول، اطرح الثواني 0 9 * * 1-5 # = أيام الأسبوع في 9:00 صباحاً
يوم شهر خارج نطاق الشهر
لا يتحقق cron من يوم الشهر مقابل الشهر الفعلي. `0 0 31 2 *` (31 فبراير) يُحلَّل بشكل جيد لكنه لا يطابق أبداً — لفبراير 29 يوماً كحد أقصى. يفترض المبتدئون أن المحلل سيلتقط ذلك؛ لكنه لا يفعل. تعرض معاينة التشغيل التالي في هذه الأداة «لا توجد عمليات تشغيل قادمة» حين يكون التعبير صالحاً بنيوياً لكنه مستحيل منطقياً.
# 30 أو 31 فبراير — لا يعمل أبداً 0 0 30 2 * 0 0 31 2 * # يُحلَّل لكن لا ينطلق أي جدول
# استخدم نمط 'آخر يوم عمل من فبراير' عبر سكربت 0 0 28-29 2 * [ $(date -d tomorrow +\%m) = 03 ] && /your-script
الخلط بين صيغة Quartz وPOSIX
تعرض وثائق AWS ودروس Spring وكثير من إجابات Stack Overflow تعبيرات cron بصيغة Quartz بـ`?` أو `L` أو `W` أو `#`. لا تعمل في crontab على Linux. إذا نسخت تعبيراً بستة حقول به `?` في خانة يوم الأسبوع، سيرفضه محلل Linux (أو أسوأ، يسيء تحليله صامتاً). تلتقط هذه الأداة عوامل Quartz وتشرح الفرق.
# Quartz: 'آخر جمعة من الشهر' — غير صالح في POSIX 0 0 ? * 6L *
# نهج سكربت غلاف POSIX لآخر جمعة 0 0 25-31 * 5 /your-script # يعمل يوم الجمعة بين 25-31 من أي شهر
حالات استخدام شائعة
- مهام crontab على Linux
- أنشئ مدخلات وتحقق منها لـ`/etc/crontab` أو `/etc/cron.d/*` أو ملفات `crontab -e` لكل مستخدم. استخدم معاينة التشغيل التالي للتأكد من أن الجدول يقع في الوقت الصحيح ضمن المنطقة الزمنية المُعدّة لخادمك قبل الحفظ.
- جداول Kubernetes CronJob
- أنشئ حقل `spec.schedule` لـKubernetes CronJob. يدعم Kubernetes 1.27+ أيضاً `spec.timeZone` — استخدم مفتاح UTC لتصميم جدولك بـUTC، ثم اضبط `timeZone` صراحة لتجنب الوقت المحلي لعقدة العامل.
- سير عمل مجدول في GitHub Actions
- أنشئ مدخل `cron:` تحت `on.schedule`. يعمل GitHub Actions دوماً بـUTC — بدّل المعاينة إلى UTC للتأكد من جدولك. تجنّب الفترات الأقصر من 15 دقيقة؛ يتخطى مُجدول GitHub المهام قصيرة الفاصل تحت الحِمل.
- قواعد AWS EventBridge
- أنشئ تعبير cron لقاعدة مجدولة في EventBridge. ملاحظة: يستخدم AWS صيغة Quartz بستة حقول مع `?` ليوم الأسبوع — تُصدر هذه الأداة POSIX بخمسة حقول، فستحتاج إلى التحويل ببَدء الثواني (`0`) واستبدال `*` في أحد حقلي اليوم بـ`?`.
- أنابيب CI مجدولة في GitLab
- تحقق من تعبير cron لأنبوب CI مجدول في GitLab. يستخدم GitLab صيغة POSIX بخمسة حقول — وهو ما تُصدره هذه الأداة — ومنتقي تاريخ في الواجهة، لكن صيغة cron تعطيك تحكماً أدق للفترات غير القياسية.
- Cloudflare Workers Cron Triggers
- أنشئ مدخل `[triggers.crons]` في `wrangler.toml`. يستخدم Cloudflare صيغة POSIX بخمسة حقول. أصغر فاصل دقيقة واحدة؛ ويعمل العامل بـUTC. استخدم المعاينة للتأكد من أن المُطلِق ينطلق ضمن نافذتك المتوقعة.
- جداول node-cron في Node.js
- أنشئ تعبيرات لمكتبة node-cron، التي تدعم POSIX بخمسة حقول وأيضاً حقل ثواني اختياري في المقدمة. التزم بخمسة حقول إلا إذا احتجت دقة تحت الدقيقة تحديداً — تعبيرات الحقول الستة لا تُنقَل إلى crontab على Linux.
- مراجعة الكود والتوثيق
- الصق تعبير cron من طلب سحب أو دليل تشغيل لتفهم ما يفعله فوراً — لا مزيد من التخمين في `30 7 * * 1-5` ولا إخراج بطاقة مرجع. الوصف بلغة طبيعية رائع أيضاً للتعليقات داخل الكود وملفات README.
مرجع صيغة cron
- ترتيب الحقول: M H D M W
- الدقيقة (0-59)، الساعة (0-23)، يوم الشهر (1-31)، الشهر (1-12)، يوم الأسبوع (0-6، 7 أيضاً = الأحد). ذكرى: «My Hat Doesn't Match Wendy's». يقبل حقل يوم الأسبوع كلاً من الرموز الرقمية (0-6) والمسماة (SUN-SAT، غير حساس لحالة الأحرف).
- العوامل
- `*` = أي قيمة؛ `,` = فاصل قائمة (`1,3,5`)؛ `-` = نطاق (`1-5`)؛ `/` = خطوة (`*/15`، `5/10`)؛ الأسماء: JAN-DEC للشهر، وSUN-SAT ليوم الأسبوع (غير حساسة لحالة الأحرف).
- الماكروات (الاختصارات)
- `@yearly` = `0 0 1 1 *`؛ `@annually` = `0 0 1 1 *`؛ `@monthly` = `0 0 1 * *`؛ `@weekly` = `0 0 * * 0`؛ `@daily` = `0 0 * * *`؛ `@midnight` = `0 0 * * *`؛ `@hourly` = `0 * * * *`. أما `@reboot` فهو حالة خاصة غير زمنية (يعمل عند الإقلاع فقط) ويُرفَض بخطأ توضيحي.
- دلالة يوم POSIX (قاعدة «أو»)
- حين يكون كلٌّ من يوم الشهر ويوم الأسبوع مقيَّداً (لا أحد منهما `*`)، يعمل الجدول حين يطابق أيُّهما — دلالة «أو». حين يُقيَّد أحدهما فقط، يقرر ذلك الواحد. وحين يكون كلاهما `*`، يطابق كل يوم. تنطبق هذه القاعدة على vixie cron وBSD cron ومعظم تطبيقات POSIX؛ ويستخدم Quartz `?` للتمييز بين «و» و«أو».
- وضع الحقول الستة (Quartz-Lite)
- إذا احتوى إدخالك على ستة رموز مفصولة بمسافة، تعامل الأداة الأول كحقل ثواني (0-59). مفيد لـQuartz وSpring `@Scheduled(cron=...)` وnode-cron. غير قابل للنقل إلى crontab على Linux أو مُجدولات POSIX — ستعامل ثوانيك دقائق وتُزيح كل شيء بموضع واحد.
- تثبيت عامل الخطوة
- `*/N` مرتبط بأدنى قيمة في الحقل: `*/15` في الدقيقة = `0,15,30,45`، لا «كل 15 بدءاً من الآن». بقاعدة غير رمز عام: `5/15` في الدقيقة = `5,20,35,50`. قيم الخطوة التي لا تقسم نطاق الحقل بالتساوي ستتخطى قرب الالتفاف — هذا صحيح، لا خلل.
- حدود التحقق
- الدقيقة ∈ [0,59]، الساعة ∈ [0,23]، يوم الشهر ∈ [1,31]، الشهر ∈ [1,12]، يوم الأسبوع ∈ [0,7]. القيم خارج النطاق تنتج خطأً على مستوى الحقل. لا يُتحقَّق من يوم الشهر مقابل الشهر (`0 0 31 2 *` يُحلَّل بشكل جيد لكنه لا يطابق أبداً لأن فبراير لا يوم 31 له — ستعرض معاينة التشغيل التالي «لا توجد عمليات تشغيل قادمة»).
- رفض عوامل Quartz
- لا يدعم POSIX cron عوامل Quartz: `?` (بلا قيمة محددة)، و`L` (الأخير)، و`W` (أقرب يوم عمل)، و`#` (اليوم النوني). ترفضها هذه الأداة برسالة واضحة «Quartz operators not supported» بدلاً من تحليلها صامتاً كـPOSIX غير صالح. لجداول Quartz، استخدم أداة واعية بـQuartz أو مُجدول Spring بدلاً منها.
- سقف سنوات البحث عن التشغيل التالي
- يبحث حساب التشغيل التالي حتى 4 سنوات قُدماً؛ التعبيرات التي تطابق بأقل من ذلك (مثل أنماط «29 فبراير») ستعرض «لا توجد عمليات تشغيل قادمة خلال 4 سنوات». هذا مقصود لتجنب التكرار اللامحدود على أنماط مستحيلة.
أفضل الممارسات لجداول cron
- استخدم UTC على الخوادم، وحوّل عند العرض
- اضبط خوادمك على UTC (`/etc/timezone` أو `TZ=UTC`) واكتب كل تعبيرات cron بـUTC. حوّل إلى الوقت المحلي وقت العرض فقط في لوحاتك وتقاريرك. هذا يلغي صنفاً كاملاً من أخطاء المناطق الزمنية التي تضرب بأقسى صورها أثناء انتقالات التوقيت الصيفي، حين تتضاعف جداول الوقت المحلي صامتةً أو تتخطى تشغيلاً. استخدم مفتاح UTC في هذه الأداة لتصميم جدولك بـUTC من البداية.
- تجنّب فخ «أو» بين يوم الشهر ويوم الأسبوع في POSIX
- لا تُقيّد كلاً من يوم الشهر ويوم الأسبوع إلا إذا أردت دلالة «أو». إذا أردت «كل إثنين في يناير»، فاكتب `0 0 * 1 1` (يوم الشهر `*`)؛ وإذا أردت «الأول من كل شهر»، فاكتب `0 0 1 * *` (يوم الأسبوع `*`). قاعدة «أو» في POSIX تعني أن `0 0 1 * 1` يعمل في الأول وأيضاً في كل إثنين — تقريباً ليس ما قصدته. ستلتقط معاينة التشغيل التالي ذلك إن تحققت قبل النشر.
- ثبّت منطقة الجدول الزمنية صراحة
- تدعم المُجدولات الحديثة تثبيت المنطقة الزمنية في تعريف الجدول: `CRON_TZ=America/New_York` أعلى crontab (vixie cron 3.0+)، و`spec.timeZone: "America/New_York"` لـKubernetes CronJobs 1.27+، وتعبير جدول بـ`ScheduleExpressionTimezone` لـAWS EventBridge Scheduler. ثبّت المنطقة صراحة بدل الاعتماد على افتراضي الخادم — يمكن أن تتغير مناطق الخوادم دون إنذار خلال نقل البنية التحتية.
- وزّع الحِمل عبر الدقائق، لا عند :00
- تجنّب `0 * * * *` (كل ساعة عند الدقيقة 0) للمهام غير الحرجة — على مستوى التوسع، تكدّس جدولة الأشياء عند :00 بالضبط يخلق طفرات حِمل. اختر إزاحة دقيقة عشوائية (`23 * * * *`، `41 * * * *`) لكل مهمة لتوزيع الحِمل. ينطبق ذلك على المهام اليومية: `30 3 * * *` أرفق بقاعدة بياناتك من `0 3 * * *` حين تتجمع مهام كثيرة عند 3:00.
- اجعل المهام لا تتأثر بالتكرار
- لا يوجد في cron إعادة محاولة مدمجة ولا منع تداخل ولا تعافٍ من التشغيلات الفائتة. يجب أن تكون مهمتك آمنة لتُشغَّل مرات عدة (لا تتأثر بالتكرار) وفاحصة لذاتها. بدلاً من «أرسل التقرير في 9 صباحاً»، صمّمها كـ«أرسل تقرير اليوم إن لم يُرسَل بعد» — هذا يداوي نفسه بعد التوقف، ومضاعفة الجدولة العرضية، والتشغيلات المتزامنة. عدم التأثر بالتكرار خاصية المهمة لا المُجدول، وهو الممارسة الأهم للموثوقية.
- أضف نبضاً للجداول الحرجة
- وضع الإخفاق الصامت في cron أكبر ضعفه — إذا لم ينطلق الجدول، لا شيء يخبرك. للمهام الحرجة، اجعل المهمة تستدعي خدمة نبض (Healthchecks.io، Cronitor، Dead Man's Snitch) في نهاية كل تشغيل؛ تنبهك الخدمة إذا لم يصل النبض المتوقع. يلتقط ذلك إخفاق المهمة وإخفاق الجدول نفسه. الطبقة المجانية تغطي معظم احتياجات الأفراد والفرق الصغيرة.
- تحقق بمعاينة التشغيل التالي قبل الشحن
- قبل نشر جدول cron جديد، انظر إلى المواعيد الخمسة القادمة في معاينة هذه الأداة. بدّل بين المحلي وUTC. تأكد من أن الجدول يقع حيث تنوي — لا قبل خمس دقائق، ولا في يوم خاطئ، ولا متخطياً عطلة نهاية الأسبوع التي اهتممت بها. المعاينة هي أرخص اختبار إنتاجي ممكن.
الأسئلة الشائعة
ماذا تفعل هذه الأداة؟
ما تعبير cron؟
هل تُرفع بياناتي إلى أي مكان؟
ما الفرق بين POSIX cron وQuartz؟
لماذا يعمل '0 0 1 * 5' في كل جمعة وأيضاً في الأول من الشهر؟
كيف أشغّل مهمة كل 30 ثانية؟
أي منطقة زمنية يستخدمها cron؟
إلى ماذا يتمدد '*/15' فعلياً؟
هل أستطيع استخدام تعبير بستة حقول مع الثواني؟
ما أقصى فاصل يستطيع cron التعبير عنه؟
كيف أتعامل مع تشغيلات فائتة بعد توقف؟
لماذا لا يعمل cron في GitHub Actions في وقته؟
أدوات ذات صلة
عرض جميع الأدوات →محوّل طابع Unix الزمني — فوري ومجاني
التاريخ والوقت
حوّل طوابع يونكس الزمنية (Unix Timestamp) إلى تواريخ مقروءة فوراً والعكس. يكتشف الثواني والمللي ثانية تلقائياً. أداة مجانية وخاصة تعمل في متصفّحك. جرّبها الآن.
محوّل الأنظمة العددية — ثنائي وست عشري وعشري وثماني
أدوات التحويل
حوّل بين الأنظمة الثنائية والست عشرية والعشرية والثمانية وأي أساس من 2 إلى 36 فوراً — أداة مجانية أونلاين تعمل في متصفّحك. جرّبها الآن.
محوّل Base64 — ترميز وفك ترميز أونلاين
الترميز والتنسيق
رمّز وفك ترميز Base64 مجاناً أونلاين — محوّل فوري مع دعم UTF-8 والرموز التعبيرية. خصوصية 100% — يعمل في متصفّحك. جرّبه الآن.
محوّل CSV إلى JSON
الترميز والتنسيق
حوّل CSV إلى JSON في متصفحك. RFC 4180، استنتاج الأنواع، صف العنوان، أمان الأعداد الكبيرة. خصوصية 100%.
ضغط الصور — JPEG وPNG وWebP
أدوات التحويل
اضغط صور JPEG وPNG وWebP أونلاين مجاناً — بياناتك لا تغادر متصفّحك أبداً. قلّل حجم الصورة حتى 80% مع الحفاظ على الجودة. معالجة دفعية لـ 20 صورة.
JSON Diff مقارنة
الترميز والتنسيق
قارن ملفي JSON فوراً في متصفحك. عرض جنباً إلى جنب مع تمييز الفروق، وإخراج JSON Patch (RFC 6902)، وتجاهل الحقول المزعجة كالطوابع الزمنية والمعرّفات. خصوصية تامة، بدون رفع ملفات.