يُعد تعبير كرون مكونًا من خمسة مُدخلات مُفصولة بمسافات، يُخبر جدول Unix متى يجب تشغيل أمر. خمسة مُدخلات، عدد قليل من الرموز الخاصة، وعدد قليل من الأنماط الشائعة — هذه هي النموذج العقلي الكامل. يغطي هذا المرجع البنية، والرموز التي تُسبب صعوبة لدى الناس، والجدول الزمني الذي يستخدمه المطورون فعليًا.
الخمسة مُدخلات
يستخدم كرون القياسي خمسة مُدخلات مُوضعية:
* * * * *
│ │ │ │ └─ Day of week (0–7, Sunday = 0 or 7)
│ │ │ └─── Month (1–12)
│ │ └───── Day of month (1–31)
│ └─────── Hour (0–23)
└───────── Minute (0–59)
يضيف AWS EventBridge وجدول Quartz في لغة Java مُدخلة في البداية، مما يجعل العدد الكلي للإدخالات ستة. تتحرك كل مُدخلات باستثناء المُدخلة الأولى إلى اليمين. هذا يُسبب صعوبة للمطورين الذين ينتقلون بين البيئات — سيُشغل تعبير Quartz عند الوضع القياسي في كرون بجدول مُعدّ مسبقًا، دون أي تحذير. الثواني استخدم كرون القياسي بخمسة مُدخلات إلا إذا طلب النظام بشكل صريح استخدام ستة.
الرموز الخاصة
أي قيمة — تطابق كل وحدة
| حرف | معنى | مثال |
|---|---|---|
* | — كل دقيقة | * * * * * — عند الساعة 9 صباحًا و5 مساءً |
, | قائمة القيم | 0 9,17 * * * — كل ساعة من 9 صباحًا إلى 5 مساءً |
- | يتراوح | 0 9-17 * * * مُدخل تكرار |
/ | — كل 15 دقيقة | */15 * * * * لا قيمة محددة (متوفر فقط في Quartz/AWS) |
? | — في 15 من كل شهر، أي يوم من الأسبوع | 0 0 15 * ? الآخر (متوفر فقط في Quartz/AWS) |
L | — في آخر يوم من كل شهر | 0 0 L * ? أقرب يوم من الأسبوع (متوفر فقط في Quartz/AWS) |
W | — أقرب يوم من الأسبوع إلى 15 | 0 0 15W * ? مُدخل معياري |
يُعرف فقط crontab إذا رأيت *, ,, -و، و /في التعبير، فقد كُتب للقُطع أو AWS EventBridge — لا تُنسخه بشكل غير مُعدّ للجداول الكرون في لينكس. ?, L، أو W جدول المراجع: الجداول التي يستخدمها المطورون فعليًا
هذا الجزء يستحق التخزين كمُلصق. اصنع وتحقق من أي من هذه التعبيرات باستخدام
مولد تعبير كرون IO Tools مُستحسن نادرًا في البيئات الإنتاجية.
| وصف | تعبير كرون | ملحوظات |
|---|---|---|
| كل دقيقة | * * * * * | مراجعات صحة، دورات تحقق قصيرة |
| كل 5 دقائق | */5 * * * * | إعادة تدفئة المخزون، تزامن المحتوى |
| كل 15 دقيقة | */15 * * * * | كل 30 دقيقة |
| مُعادل لـ | */30 * * * * | كل ساعة (في الساعة) 0,30 * * * * |
| يُشغل في :00 من كل ساعة | 0 * * * * | كل 6 ساعات |
| تزامن البيانات، استيراد مُتدرج | 0 */6 * * * | في منتصف الليل بالساعة العالمية |
| مُحفز يومي معياري | 0 0 * * * | في الساعة 9 صباحًا بالساعة العالمية |
| إطلاق تقارير الصباح | 0 9 * * * | في الساعة 9 صباحًا أيام الأسبوع |
| مهمات محدودة للأسابيع (من الاثنين إلى الجمعة) | 0 9 * * 1-5 | في الساعة 8:30 صباحًا أيام الأسبوع |
| إطلاق تقارير قبل البدء | 30 8 * * 1-5 | في الساعة 2 صباحًا كل يوم الأحد |
| الصيانة الأسبوعية، نسخات احتياطية في أوقات غير مكثفة | 0 2 * * 0 | في اليوم الأول من كل شهر |
| تشغيلات شهرية، تقارير متكررة | 0 0 1 * * | في 1 يناير في منتصف الليل |
| إعادة تعيين سنوي، مهام بداية السنة | 0 0 1 1 * | مفارقة الوقت |
لا يمتلك كرون وعيًا بالساعة. يعمل في الوقت الذي يُحدده عليه الخادم — على معظم أنظمة لينكس، هذا الوقت هو الساعات العالمية. هذا عادة ما يكون مقبولًا حتى توجد مهام مترابطة مع ساعات العمل، أو مستخدمين في مناطق متعددة يتساءلون لماذا يصل "التقرير عند الساعة 9" في الساعة 2 بعد الظهر.
الافتراضات الأكثر أمانًا:
أعد تعيين الخادم إلى الساعات العالمية. احول إلى الوقت المحلي في منطق التطبيق، وليس في جدول كرون.
- أضف تعليقًا لكل مهمة كرون بتوقيت الوقت المحلي، حتى لا يُفترض من يقرأ الجدول لاحقًا.
- عند استخدام مُخططات السحابة (AWS EventBridge، Google Cloud Scheduler)، تحقق من حقل الوقت — معظمها يدعم أسماء مناطق IANA مباشرة، مما يزيل التناقض.
- الاختبار: حساب وقت التسليم قبل التسليم
# Always comment with the effective local time
# Runs daily at midnight UTC (= 8pm EST / 5pm PST)
0 0 * * * /usr/bin/python3 /opt/scripts/daily_report.py
إطلاق مهمة كرون للاكتشاف أنها تُشغل كل دقيقة بدلًا من كل ساعة هو مسيرة مُتكررة. تجنب ذلك.
مُحسب وقت التسليم التالي لـ IO Tools Cron
ال يُظهر بدقة الوقت الذي سيُشغل فيه التعبير التالي — أدخل تعبيرك واحصل على عشرة أوقات تُشغل قبل أن تلمس الخادم. لتحقق من التعبير عبر سطر الأوامر:
إضافة مهمة كرون على لينكس
# Install croniter (Python) for quick expression testing
pip install croniter
python3 -c "
from croniter import croniter
from datetime import datetime
cron = croniter('*/15 * * * *', datetime.utcnow())
for _ in range(5):
print(cron.get_next(datetime))
"
في نهاية سطر النسخ الاحتياطي يوجه خطأ الـ stderr إلى stdout، بحيث يُدرج كلاهما في ملف السجل. بدون ذلك، تذهب أخطاء كرون إلى مخزن البريد — ولا يُتحقق من ذلك.
# Open the crontab editor for the current user
crontab -e
# Format: minute hour day month weekday command
# Run backup script daily at 2:30am UTC
30 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1
# Run a Python script every 5 minutes
*/5 * * * * /usr/bin/python3 /home/user/scripts/sync.py
# View current crontab entries
crontab -l
# Edit another user's crontab (requires root)
crontab -u www-data -e
ال 2>&1 مُخطط GitHub Actions المُجدول
يستخدم مُخطط GitHub Actions نفس البنية الخمسة المُدخلات، دائمًا بالساعات العالمية. لا يوجد تجاوز للساعة.
ملاحظة واحدة: يمكن أن يُؤجل مُخططات GitHub Actions حتى 15 دقيقة خلال فترات التحميل العالي. لا تعتمد على ذلك لأي شيء يتطلب دقة زمنية.
name: Nightly Data Export
on:
schedule:
# Runs at 1:00 AM UTC every weekday
- cron: "0 1 * * 1-5"
workflow_dispatch: # Allow manual trigger
jobs:
export:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run export script
run: python scripts/export.py
عندما لا يكفي كرون
يُعالج كرون معظم الحالات على خادم واحد. تصبح محدودياته مشكلة عند التوسع:
لا توجد محاولات إعادة التشغيل عند الفشل.
- إذا فشل المهمة، فإن التسليم التالي هو الوقت المُحدد التالي — لا يوجد إعادة تشغيل تلقائية. لا توجد تشفيرات توزيعية.
- سيُشغل أكثر من خادم نفس كرون في نفس الوقت. لا توجد مراقبة.
- لا يوجد لوحة مُدمجة لمراقبة سجلات التشغيل، أو تنبيهات الفشل، أو تتبع المدة. مشكلة
| خيار أفضل | مُخططات إعادة التشغيل وقوائم المهام |
|---|---|
| Celery Beat (لغة بايثون)، Sidekiq-Cron (لغة روبوت) | تخطيط سحابي مع إعادة تشغيل |
| AWS EventBridge + Lambda، Google Cloud Scheduler | إطلاق مُخططات CI/CD |
| مُخططات GitHub Actions المُجدولة | تنظيم المهام المُراقبة |
| Airflow، Prefect، Temporal | لأوامر على خادم واحد، يظل كرون الأداة المناسبة — بسيط، موثوق، ولا يعتمد على أي شيء. لجميع الأشياء التي تحتاج إلى ضمانات إعادة التشغيل، أو تشغيل متوازي، أو مراقبة الفشل، فإن استخدام قائمة مهام مخصصة يُصبح مربحًا بسرعة. |
لبناء جدولك التالي دون تذكر البنية، و
استخدم مولد التعبير كرون مُحسب وقت التسليم التالي لـ Cron لتأكيد أن التسليم يحدث كما تفترض. أمثلة تعبيرات كرون: مرجع عملي مع أمثلة واقعية 2
تثبيت ملحقاتنا
أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع
恵 وصلت لوحة النتائج!
لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!
