مولد تعبيرات Cron

أنشئ تعبيرات cron بصريًا باستخدام منشئ خطوة بخطوة

إعدادات مسبقة

الدقيقة

الساعة

يوم الشهر

الشهر

يوم الأسبوع

تعبير cron

0 9 * * *

minute hour day(month) month day(week)

ما هو مولد تعبيرات Cron؟

مولد تعبيرات cron هو أداة تبني سلاسل جدولة cron عبر واجهة بصرية بدلاً من كتابتها يدوياً. تعبيرات cron هي سلاسل من خمسة حقول (الدقيقة، والساعة، ويوم الشهر، والشهر، ويوم الأسبوع) تحدد متى تُنفَّذ مهمة متكررة. يعود هذا التنسيق إلى برنامج cron الأصلي لنظام Unix الصادر عام 1979، ويُستخدم اليوم في crontab و Kubernetes CronJobs و GitHub Actions و AWS EventBridge و Google Cloud Scheduler وعشرات مكتبات جدولة المهام.

كتابة تعبيرات cron من الذاكرة مصدر شائع للأخطاء. تتفاعل الحقول الخمسة بطرق غير مباشرة: قيمة الخطوة */15 في حقل الدقيقة تُنتج تشغيلات عند الدقائق 0 و15 و30 و45، بينما تبدأ 5/15 عند الدقيقة 5 وتُنتج 5 و20 و35 و50. دمج يوم-الشهر ويوم-الأسبوع بقيم غير أحرف بدل يُنشئ شرط OR لا AND، مما يفاجئ حتى المهندسين ذوي الخبرة. يُزيل المولد البصري هذا الغموض بتركك تختار الجدول الذي تريده وينتج الصيغة الصحيحة تلقائياً.

يختلف مولد cron عن محلل cron. المحلل يأخذ تعبيراً موجوداً ويشرحه بلغة مفهومة. المولد يعمل في الاتجاه المعاكس: تصف الجدول الذي تحتاجه، وتُخرج الأداة سلسلة cron المطابقة. استخدم المولد عند إنشاء مهمة مجدولة جديدة، واستخدم المحلل عند مراجعة المهام الموجودة أو تصحيحها.

لماذا تستخدم هذا المولد؟

بناء تعبير cron يدوياً يعني حفظ ترتيب الحقول ونطاقات القيم وقواعد المُشغّلات. حقل واحد في المكان الخطأ يحوّل مهمة يومية إلى مهمة تُنفَّذ كل دقيقة. هذا المولد يتيح لك اختيار جدولك بصريًا ونسخ النتيجة بنقرة واحدة.

🖱️
منشئ جدولة بصري
اختر قيم الدقيقة والساعة واليوم والشهر ويوم الأسبوع من قوائم منسدلة وأزرار تبديل. يتجدد تعبير cron في الوقت الفعلي مع تغيير كل حقل. لا حاجة لحفظ الصيغة.
🔒
معالجة تحافظ على خصوصيتك
تعمل عملية التوليد بالكامل في متصفحك. لا تُرسَل بيانات الجدولة إلى أي خادم. تعبيرات cron وإعدادات مهامك تبقى على جهازك.
نتيجة فورية مع معاينة
شاهد تعبير cron المولَّد ومعاينة أوقات التشغيل التالية أثناء البناء. تحقق من صحة الجدول قبل نسخه إلى إعداداتك.
📋
لا حساب مطلوب
افتح الصفحة وابدأ البناء. بدون تسجيل دخول، بدون مفتاح API، بدون تثبيت. يعمل على أي جهاز بمتصفح حديث، بما فيها الأجهزة المحمولة.

حالات استخدام مولد Cron

مطور واجهة أمامية
أنشئ تعبيرات cron للوحات الإدارة وواجهات الجدولة. ولّد الصيغة الصحيحة لمنتقيات الجداول التي تخزّن سلاسل cron في قاعدة البيانات.
مهندس خلفية
أنشئ تعبيرات cron لقوائم المهام مثل Celery و Sidekiq و Bull. ولّد سلسلة الجدول، وتحقق من التشغيلات التالية، والصقها في إعداد مهامك.
DevOps / SRE
ولّد جداول cron لـ Kubernetes CronJobs ومسارات CI/CD وأتمتة البنية التحتية. أنشئ تعبيرات لنوافذ النسخ الاحتياطي وتجديد الشهادات وتدوير السجلات دون أخطاء في الصيغة.
مهندس ضمان جودة
أنشئ تعبيرات cron اختبارية تُشغَّل على فترات محددة لاختبار التكامل. ولّد جداول تُنتج أوقات تشغيل يمكن التنبؤ بها للتحقق من سلوك المُجدول.
مهندس بيانات
أنشئ تعبيرات cron لمُشغّلات مسارات ETL وجداول مزامنة البيانات. ولّد جداول غير متداخلة لمراحل الاستخراج والتحويل والتحميل بتوقيت دقيق.
طالب / متعلم
تعلم صيغة cron بالتجريب مع المنشئ البصري. غيّر الحقول الفردية وشاهد كيف يتغير التعبير وأوقات التشغيل التالية. طوّر حدسك حول أحرف البدل والنطاقات وقيم الخطوة.

إعدادات جداول Cron الشائعة

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

الجدولالتعبيرالاستخدام النموذجي
Every minute* * * * *Health checks, queue polling
Every 5 minutes*/5 * * * *Metrics collection, cache refresh
Every 15 minutes*/15 * * * *API sync, dashboard updates
Every hour0 * * * *Log rotation, report generation
Every 6 hours0 */6 * * *Database backups, digest emails
Daily at midnight0 0 * * *Nightly batch jobs, cleanup scripts
Daily at 9 AM0 9 * * *Daily reports, notification digests
Weekdays at 9 AM0 9 * * 1-5Business-hours tasks, standup reminders
Every Monday at midnight0 0 * * 1Weekly reports, dependency updates
First of every month0 0 1 * *Billing runs, monthly aggregation
Every Sunday at 2:30 AM30 2 * * 0Full backups during low-traffic window
January 1st at midnight0 0 1 1 *Annual reports, license renewals

مكوّنات بناء تعبيرات Cron

لكل تعبير cron خمسة حقول بالضبط، تُقرأ من اليسار إلى اليمين. يقبل كل حقل قيماً ومُشغّلات محددة. معرفة هذه القواعد كافية لكتابة أي جدول قد تصادفه في الإنتاج.

تخطيط تعبير cron ذي الخمسة حقول:
*min0-59
*hour0-23
*day1-31
*month1-12
*weekday0-6

أربعة مُشغّلات تتحكم في كيفية مطابقة القيم داخل كل حقل. يمكن دمجها: 1-5/2 في حقل يوم-الأسبوع يعني الاثنين والأربعاء والجمعة (النطاق 1-5، خطوة 2).

المُشغّلالصيغةمثالالنتيجة
Wildcard** (minute)Every minute
Lista,b,c1,15 (day)1st and 15th
Rangea-b9-17 (hour)9 AM through 5 PM
Step*/n*/10 (minute)Every 10 minutes
Range+Stepa-b/n10-30/5 (min)10, 15, 20, 25, 30

أمثلة برمجية

كيفية إنشاء جداول cron وتسجيلها في Node.js و Python و Go و bash:

JavaScript (Node.js)
import { CronJob } from 'cron';

// Build a cron expression: every weekday at 9:00 AM
const expression = '0 9 * * 1-5';

const job = new CronJob(expression, () => {
  console.log('Running weekday morning task');
});
job.start();

// Programmatic expression building
function buildCron({ minute = '*', hour = '*', dom = '*', month = '*', dow = '*' }) {
  return `${minute} ${hour} ${dom} ${month} ${dow}`;
}

const expr = buildCron({ minute: '0', hour: '*/6', dow: '1-5' });
console.log(expr); // → "0 */6 * * 1-5"
Python
from crontab import CronTab

# Create a new cron job for the current user
cron = CronTab(user=True)

# Build a job: run backup.py every day at 2:30 AM
job = cron.new(command='python3 /home/user/backup.py')
job.setall('30 2 * * *')

print(job)           # → 30 2 * * * python3 /home/user/backup.py
print(job.is_valid()) # → True

# Schedule every 15 minutes on weekdays
job2 = cron.new(command='/usr/bin/sync-data')
job2.minute.every(15)
job2.dow.during('MON', 'FRI')

cron.write()  # Save to user's crontab

# Verify next run time
from croniter import croniter
from datetime import datetime

it = croniter('30 2 * * *', datetime.now())
print(it.get_next(datetime))  # → next 2:30 AM timestamp
Go
package main

import (
    "fmt"
    "strings"
    "github.com/robfig/cron/v3"
)

// BuildCron constructs a 5-field cron expression from parts
func BuildCron(minute, hour, dom, month, dow string) string {
    fields := []string{minute, hour, dom, month, dow}
    return strings.Join(fields, " ")
}

func main() {
    // Generate: every weekday at 9 AM
    expr := BuildCron("0", "9", "*", "*", "1-5")
    fmt.Println(expr) // → 0 9 * * 1-5

    // Validate and schedule it
    c := cron.New()
    _, err := c.AddFunc(expr, func() {
        fmt.Println("Running scheduled task")
    })
    if err != nil {
        fmt.Printf("Invalid expression: %v\n", err)
        return
    }
    c.Start()
}
Bash (crontab)
# Open the crontab editor to add a new job
crontab -e

# Add a cron job without opening an editor:
# Run cleanup.sh every Sunday at 3 AM
(crontab -l 2>/dev/null; echo "0 3 * * 0 /home/user/cleanup.sh") | crontab -

# Generate and add a job: every 10 minutes, log disk usage
EXPR="*/10 * * * *"
CMD="df -h >> /var/log/disk-usage.log"
(crontab -l 2>/dev/null; echo "$EXPR $CMD") | crontab -

# Verify the job was added
crontab -l | tail -1
# → */10 * * * * df -h >> /var/log/disk-usage.log

# Remove all cron jobs (use with caution)
# crontab -r

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

ما هو الترتيب الصحيح للحقول في تعبير cron؟
الترتيب القياسي لخمسة حقول هو: الدقيقة (0-59)، والساعة (0-23)، ويوم الشهر (1-31)، والشهر (1-12)، ويوم الأسبوع (0-6، حيث 0 هو الأحد). هذا الترتيب معرَّف بواسطة POSIX وتستخدمه crontab و Kubernetes و GitHub Actions ومعظم مكتبات cron. تضيف بعض الأدوات مثل Quartz Scheduler حقل ثوانٍ في البداية مما يجعلها ستة حقول، لكن التخطيط ذو الخمسة حقول هو القياسي المعتمد.
كيف أولّد تعبير cron لـ 'كل N دقيقة'؟
استخدم مُشغّل الخطوة في حقل الدقيقة: */N. لكل 5 دقائق اكتب */5 * * * *. لكل 15 دقيقة اكتب */15 * * * *. يُقسّم مُشغّل الخطوة نطاق الحقل بالتساوي. انتبه: */7 لا ينتج تشغيلات كل 7 دقائق عبر حدود الساعة؛ ينتج تشغيلات عند الدقائق 0 و7 و14 و21 و28 و35 و42 و49 و56 ثم يعيد الضبط إلى 0 عند الساعة التالية.
هل يمكنني توليد تعبير cron يُنفَّذ في آخر يوم من كل شهر؟
لا يدعم cron القياسي لـ POSIX مُشغّل 'آخر يوم من الشهر'. لا يمكنك كتابة 0 0 L * * في crontab أو Kubernetes CronJobs. الحلول البديلة تشمل الجدولة للأيام 28-31 مع إضافة فحص في الـ shell ([ $(date +%d -d tomorrow) -eq 01 ])، أو استخدام تطبيق cron موسّع مثل Quartz الذي يدعم المُعدِّل L. يمكن لـ AWS EventBridge أيضاً استهداف آخر يوم بصورة مباشرة.
ما الفرق بين مولد cron ومحلل cron؟
مولد cron يأخذ متطلبات جدولتك (مثل 'كل يوم عمل الساعة 9 صباحاً') ويُخرج تعبير cron الصحيح (0 9 * * 1-5). محلل cron يعمل بالعكس: يأخذ تعبيراً موجوداً وينتج وصفاً مفهوماً. استخدم المولد عند إنشاء جداول جديدة. استخدم المحلل عند مراجعة الجداول الموجودة أو تصحيحها.
كيف أتجنب تداخل مهام cron؟
cron بذاته لا يمنع التشغيلات المتداخلة. إذا استغرقت مهمة مجدولة كل دقيقة 90 ثانية، ستتداخل نسختان. لمنع ذلك، استخدم ملف قفل (flock في bash)، أو قفلاً موزعاً (Redis أو etcd)، أو سياسة التزامن المدمجة في مُجدولك. تمتلك Kubernetes CronJobs حقل concurrencyPolicy يمكن ضبطه على Forbid أو Replace. في مُجدولات مستوى التطبيق مثل Celery، استخدم solo pool أو قفلاً على مستوى المهمة.
هل 0 أم 1 هو أول يوم في الأسبوع في cron؟
في cron الخاص بـ POSIX، 0 هو الأحد و6 هو السبت. يمثل كلٌّ من 0 و7 يوم الأحد في معظم التطبيقات. يستخدم Quartz Scheduler اصطلاحاً مختلفاً حيث 1 هو الأحد و7 هو السبت. إذا كان نظامك يدعم أسماء الأيام (SUN, MON, TUE)، فاستخدمها بدلاً من الأرقام لتجنب الالتباس عبر المنصات.
كيف أولّد تعبير cron لمنطقة زمنية محددة؟
يستخدم crontab التقليدي المنطقة الزمنية المحلية للنظام. يمكنك ضبط متغير TZ في ملف crontab (TZ=America/New_York) على بعض الأنظمة. تدعم Kubernetes CronJobs حقل .spec.timeZone منذ الإصدار 1.25. تتيح لك AWS EventBridge و Google Cloud Scheduler تحديد المنطقة الزمنية لكل جدول. وثّق دائماً المنطقة الزمنية المتوقعة بجانب تعبير cron في إعداداتك.