محلل تعبيرات Cron

حلّل تعبيرات cron إلى أوصاف مفهومة واستعرض أوقات التشغيل القادمة

جرب مثالاً

تعبير cron

minute hour day(month) month day(week)

الوصف بلغة مفهومة

At 9:00 AM, Mon, Tue, Wed, Thu, Fri

تفصيل الحقول

Minute

0

0–59

Hour

9

0–23

Day (month)

*

1–31

Month

*

1–12

Day (week)

1-5

0–6

أوقات التشغيل العشرة التالية

12026-03-26 09:00:00
22026-03-27 09:00:00
32026-03-30 09:00:00
42026-03-31 09:00:00
52026-04-01 09:00:00
62026-04-02 09:00:00
72026-04-03 09:00:00
82026-04-06 09:00:00
92026-04-07 09:00:00
102026-04-08 09:00:00

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

تعبير cron عبارة عن سلسلة نصية مؤلفة من خمسة حقول مفصولة بمسافات، تُعرّف جدولاً زمنياً متكرراً. نشأ هذا التنسيق في برنامج cron الخاص بنظام Unix، الذي كتبه Ken Thompson لنظام Version 7 Unix عام 1979. يمثل كل حقل وحدة زمنية: الدقيقة، والساعة، ويوم الشهر، والشهر، ويوم الأسبوع. يعني تحليل تعبير cron تحويل هذا الترميز المضغوط إلى وصف بلغة مفهومة وقائمة بأوقات التنفيذ القادمة.

يُستخدم التنسيق القياسي ذو الخمسة حقول بواسطة crontab على Linux و macOS، ومنصات CI/CD مثل GitHub Actions و GitLab CI، ومُجدولي السحابة في AWS (EventBridge) و Google Cloud Scheduler و Azure Functions، ومكتبات جدولة المهام في جميع لغات البرمجة الرئيسية. تُوسّع بعض الأنظمة هذا التنسيق إلى ستة أو سبعة حقول بإضافة حقل للثواني أو حقل للسنة، غير أن التخطيط ذو الخمسة حقول المُعرَّف بواسطة POSIX يبقى الأساس الذي تشترك فيه جميع التطبيقات.

تحليل تعبيرات cron يدوياً أمر عُرضة للأخطاء. يُنشئ التفاعل بين الحقول جداول زمنية غير واضحة: فتعبير 0 9 1-7 * 1 لا يعني 'كل اثنين في الأسبوع الأول' بل يعني 'من اليوم الأول حتى السابع من كل شهر أو أي اثنين'. يُزيل محلل cron هذا الغموض بتوسيع كل حقل وتطبيق قواعد الدمج وإنتاج الطوابع الزمنية الفعلية لتنفيذ المهمة.

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

قراءة تعبير cron مثل 30 */6 1,15 * * من ملف إعداد ومعرفة أوقات تنفيذه بدقة يتطلب حسابات ذهنية عبر خمسة حقول. هذا المحلل يُنجز هذا العمل فوراً.

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

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

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

مرجع صيغة تعبيرات Cron

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

الحقلالنطاقالمُشغّلاتالوصف
Minute0–59* , - /Minute within the hour
Hour0–23* , - /Hour of the day (24-hour)
Day (month)1–31* , - /Day of the month
Month1–12* , - /Month of the year (or JAN–DEC)
Day (week)0–6* , - /Day of the week (0 = Sunday, or SUN–SAT)

أربعة أحرف خاصة تتحكم في كيفية مطابقة القيم داخل كل حقل:

الحرفالاسمالسلوك
*WildcardMatches every possible value in the field. * in the minute field means "every minute."
,ListSeparates individual values. 1,15 in the day field means "the 1st and 15th."
-RangeDefines an inclusive range. 1-5 in the day-of-week field means "Monday through Friday."
/StepDefines an interval. */10 in the minute field means "every 10 minutes." 5/15 means "5, 20, 35, 50."

إليك تعبيرات cron الشائعة التي تغطي معظم احتياجات الجدولة:

التعبيرالجدول
* * * * *Every minute
0 * * * *Every hour (at minute 0)
*/15 * * * *Every 15 minutes
0 9 * * *Every day at 9:00 AM
0 9 * * 1-5Weekdays at 9:00 AM
30 2 * * 0Every Sunday at 2:30 AM
0 0 1 * *First day of every month at midnight
0 0 * * 1Every Monday at midnight
0 0 1 1 *January 1st at midnight (yearly)
0 */6 * * *Every 6 hours
5,35 * * * *At minute 5 and 35 of every hour
0 9-17 * * 1-5Every hour from 9 AM to 5 PM, weekdays

أمثلة برمجية

كيفية تحليل تعبيرات cron وحساب أوقات التشغيل التالية في اللغات الشائعة:

JavaScript (Node.js)
import cronstrue from 'cronstrue';

// Parse cron to human-readable text
cronstrue.toString('0 9 * * 1-5');
// → "At 09:00 AM, Monday through Friday"

cronstrue.toString('*/15 * * * *');
// → "Every 15 minutes"

// Validate with cron-parser and get next run times
import { parseExpression } from 'cron-parser';

const interval = parseExpression('30 2 * * 0');
console.log(interval.next().toISOString());
// → next Sunday at 02:30 UTC

// Iterate over the next 5 runs
for (let i = 0; i < 5; i++) {
  console.log(interval.next().toString());
}
Python
from crontab import CronTab
from croniter import croniter
from datetime import datetime

# Parse and describe a cron expression
cron = CronTab('0 9 * * 1-5')
print(cron.next(default_utc=True))
# → seconds until next run

# Get the next 5 run times with croniter
base = datetime.now()
cron_iter = croniter('0 9 * * 1-5', base)
for _ in range(5):
    print(cron_iter.get_next(datetime))
# → next 5 weekday 09:00 timestamps

# Check if a specific time matches
print(croniter.match('*/15 * * * *', datetime(2026, 3, 25, 10, 30)))
# → True (minute 30 is divisible by 15)
Go
package main

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

func main() {
    // Parse a standard 5-field cron expression
    parser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
    schedule, err := parser.Parse("0 9 * * 1-5")
    if err != nil {
        panic(err)
    }

    // Calculate the next 5 run times
    now := time.Now()
    for i := 0; i < 5; i++ {
        now = schedule.Next(now)
        fmt.Println(now)
    }
    // → next 5 weekday 09:00 timestamps
}
Bash (crontab)
# List current user's cron jobs
crontab -l

# Edit cron jobs interactively
crontab -e

# Add a job: run backup.sh every day at 2:30 AM
# (append to crontab via pipe)
(crontab -l 2>/dev/null; echo "30 2 * * * /home/user/backup.sh") | crontab -

# Check syntax with a dry-run parse (requires cronie or busybox)
# The system will reject invalid expressions when saving

# View cron logs on systemd-based Linux
journalctl -u cron --since "1 hour ago"

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

ما الفرق بين تعبيرات cron ذات 5 حقول و6 حقول؟
صيغة cron القياسية (POSIX) تحتوي على 5 حقول: الدقيقة، والساعة، ويوم الشهر، والشهر، ويوم الأسبوع. تضيف بعض الأدوات مثل Quartz Scheduler و Spring حقل ثوانٍ في البداية مما يجعلها 6 حقول. يستخدم AWS EventBridge 6 حقول مع حقل سنة في النهاية. يدعم هذا المحلل الصيغة القياسية ذات 5 حقول المتوافقة مع crontab و GitHub Actions و Kubernetes CronJobs ومعظم مكتبات الجدولة.
كيف يتعامل cron مع يوم الشهر ويوم الأسبوع معاً؟
عندما يكون كلا الحقلين مُقيَّدَين (ليس *)، يستخدم cron منطق OR: تُنفَّذ المهمة حين يتحقق أي من الشرطين. على سبيل المثال، 0 9 15 * 1 يعني 'الساعة 9:00 صباحاً في اليوم 15 من كل شهر أو كل اثنين'. هذا مصدر شائع للارتباك. إذا كان كلا الحقلين *، تُنفَّذ المهمة كل يوم.
ما المنطقة الزمنية التي يستخدمها cron؟
يعمل crontab التقليدي وفق المنطقة الزمنية المحلية للنظام. تعتمد Kubernetes CronJobs افتراضياً على منطقة kube-controller-manager الزمنية (UTC عادةً) لكنها تدعم حقل .spec.timeZone الاختياري منذ الإصدار Kubernetes 1.25. تتيح لك AWS EventBridge و Google Cloud Scheduler تحديد المنطقة الزمنية لكل جدول. تحقق دائماً من المنطقة الزمنية التي يستخدمها مُجدولك قبل نشر مهمة cron.
هل يمكن لـ cron تشغيل مهمة كل 30 ثانية؟
لا يدعم cron القياسي ذو 5 حقول الجدولة دون مستوى الدقيقة. أصغر فترة هي دقيقة واحدة (*/1 أو *). لتشغيل شيء كل 30 ثانية، تحتاج إما إلى cron ذي 6 حقول مع حقل ثوانٍ (Quartz, Spring)، أو سكريبت مُغلِّف ينتظر 30 ثانية ثم يُعيد التشغيل، أو آلية جدولة مختلفة مثل مؤقتات systemd مع OnCalendar.
هل 0 مماثل لـ 7 في حقل يوم الأسبوع؟
في معظم تطبيقات cron، يمثل كل من 0 و7 يوم الأحد. جاء هذا الاصطلاح من نظام Unix الأصلي. غير أن بعض الأنظمة (Quartz) تستخدم 1 للأحد و7 للسبت. يُعرِّف POSIX النطاق من 0 إلى 6 حيث 0 = الأحد. إذا كان مُجدولك يقبل أسماء الأيام (SUN, MON)، فاستخدمها لتجنب الالتباس.
ماذا يحدث إذا حددت يوماً من الشهر غير موجود؟
إذا جدولت مهمة في اليوم 31 (0 0 31 * *)، فلن تُنفَّذ في الأشهر التي تقل عن 31 يوماً. لا يُرحِّل cron التاريخ إلى الشهر التالي. سيُتجاوَز شهر فبراير دائماً، وكذلك أبريل ويونيو وسبتمبر ونوفمبر. لتشغيل المهمة في آخر يوم من كل شهر، تدعم بعض تطبيقات cron المُعدِّل L (0 0 L * *)، لكن POSIX القياسي لا يدعمه.
كيف أختبر تعبير cron قبل نشره؟
استخدم محللاً أونلاين كهذا لمشاهدة أوقات التشغيل التالية والتحقق من أن الجدول يطابق نيتك. للتحقق في بيئة الإنتاج، توفر معظم مكتبات cron دالة لحساب وقت التشغيل التالي: cron-parser في Node.js، و croniter في Python، و robfig/cron في Go. شغّل التعبير عبر إحداها في مجموعة اختباراتك للتحقق من أوقات التنفيذ الـ N التالية قبل النشر.