ToolDeck

تجزیه‌کننده عبارت 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 برای Unix نسخه ۷ در سال ۱۹۷۹ نوشته شد. هر فیلد یک واحد زمانی را نمایش می‌دهد: دقیقه، ساعت، روز ماه، ماه و روز هفته. تجزیه عبارت 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 استفاده کنیم؟

خواندن عبارت cron مانند 30 */6 1,15 * * از یک فایل پیکربندی و دانستن دقیق زمان اجرای آن نیازمند محاسبه ذهنی روی پنج فیلد است. این تجزیه‌کننده آن کار را فوری انجام می‌دهد.

تجزیه فوری
یک عبارت cron تایپ یا وارد کنید و فوری توضیح قابل فهم و ۱۰ زمان اجرای بعدی برنامه‌ریزی‌شده را ببینید. بدون دکمه ارسال، بدون بارگذاری مجدد.
🔒
پردازش با حفظ حریم خصوصی
تمام تجزیه به صورت محلی در مرورگر شما انجام می‌شود. عبارات cron و داده‌های برنامه‌ریزی شما هیچ‌وقت از دستگاهتان خارج نمی‌شوند.
📋
تفکیک فیلد به فیلد
هر یک از پنج فیلد به صورت جداگانه تجزیه و نمایش داده می‌شود و مقادیر تفسیرشده را نشان می‌دهد. با یک نگاه مشخص کنید کدام فیلد برنامه را کنترل می‌کند.
🔄
بدون نیاز به حساب کاربری
صفحه را باز کنید و شروع به تجزیه کنید. بدون ورود به سیستم، بدون کلید API، بدون نصب. روی هر دستگاهی با یک مرورگر مدرن کار می‌کند.

موارد استفاده تجزیه‌کننده Cron

توسعه‌دهنده فرانت‌اند
عبارات cron را در داشبوردهای مدیریتی و رابط‌های کاربری برنامه‌ریزی قبل از ارسال به بک‌اند تأیید کنید. مطمئن شوید که برنامه‌ای که کاربر در یک منوی کشویی انتخاب کرده با رشته cron تولیدشده توسط فرم مطابقت دارد.
مهندس بک‌اند
کارهای برنامه‌ریزی‌شده‌ای که در زمان‌های غیرمنتظره اجرا می‌شوند را اشکال‌زدایی کنید. عبارت cron را از پیکربندی صف کار (Celery، Sidekiq، Quartz) وارد کنید و بررسی کنید آیا زمان‌های اجرای بعدی با انتظار شما مطابقت دارند.
DevOps / SRE
برنامه‌های cron را در pipeline‌های CI/CD، Kubernetes CronJob‌ها و پیکربندی‌های زمان‌بند ابری بررسی کنید. قبل از استقرار مطمئن شوید که کارهای پشتیبان‌گیری، تجدید گواهینامه‌ها و اسکریپت‌های پاک‌سازی به درستی زمان‌بندی شده‌اند.
مهندس QA
تأیید کنید که کارهای برنامه‌ریزی‌شده در محیط آزمایش با برنامه تولید مطابقت دارند. خطاهای off-by-one در فیلدهای ماه یا روز هفته را قبل از اینکه باعث از دست رفتن اجرا در محیط تولید شوند شناسایی کنید.
مهندس داده
تریگرهای cron برای pipeline‌های ETL و کارهای همگام‌سازی داده را بررسی کنید. مطمئن شوید که پنجره‌های استخراج با هم تداخل ندارند و وابستگی‌های پایین‌دستی زمان کافی دارند.
دانشجو / یادگیرنده
نحو cron را با آزمایش عبارات مختلف و مشاهده نتایج در زمان واقعی یاد بگیرید. درک شهودی از نحوه تعامل wildcardها، محدوده‌ها و مقادیر گام با یکدیگر به دست آورید.

مرجع نحو عبارت Cron

یک عبارت cron استاندارد پنج فیلد با فاصله دارد. هر فیلد اعداد صحیح، wildcard، محدوده، فهرست و مقادیر گام را می‌پذیرد. جدول زیر محدوده مجاز و عملگرها را برای هر فیلد نشان می‌دهد.

فیلدمحدودهعملگرهاتوضیح
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 با ۵ فیلد و ۶ فیلد چیست؟
قالب استاندارد (POSIX) cron دارای ۵ فیلد است: دقیقه، ساعت، روز ماه، ماه، روز هفته. برخی ابزارها مانند Quartz Scheduler و Spring یک فیلد ثانیه در ابتدا اضافه می‌کنند که آن را به ۶ فیلد تبدیل می‌کند. AWS EventBridge از ۶ فیلد با یک فیلد سال در انتها استفاده می‌کند. این تجزیه‌کننده از قالب استاندارد ۵ فیلدی پشتیبانی می‌کند که با crontab، GitHub Actions، Kubernetes CronJob‌ها و اکثر کتابخانه‌های زمان‌بندی سازگار است.
cron چگونه روز ماه و روز هفته را با هم مدیریت می‌کند؟
وقتی هر دو فیلد محدود شده باشند (نه *)، cron از منطق OR استفاده می‌کند: کار زمانی اجرا می‌شود که هر یک از شرایط برقرار باشد. برای مثال، 0 9 15 * 1 یعنی «ساعت ۹ صبح روز پانزدهم هر ماه یا هر دوشنبه». این یک منبع رایج سردرگمی است. اگر هر دو فیلد روی * تنظیم شوند، کار هر روز اجرا می‌شود.
cron از چه منطقه زمانی استفاده می‌کند؟
crontab سنتی در منطقه زمانی محلی سیستم اجرا می‌شود. Kubernetes CronJob‌ها به‌طور پیش‌فرض از منطقه زمانی kube-controller-manager (معمولاً UTC) استفاده می‌کنند اما از فیلد اختیاری .spec.timeZone از Kubernetes نسخه ۱.۲۵ پشتیبانی می‌کنند. AWS EventBridge و Google Cloud Scheduler به شما امکان می‌دهند منطقه زمانی را به ازای هر برنامه مشخص کنید. قبل از استقرار یک cron job همیشه بررسی کنید که زمان‌بند شما از کدام منطقه زمانی استفاده می‌کند.
آیا cron می‌تواند یک کار را هر ۳۰ ثانیه اجرا کند؟
cron استاندارد با ۵ فیلد از برنامه‌ریزی کمتر از یک دقیقه پشتیبانی نمی‌کند. کوچک‌ترین بازه یک دقیقه است (*/1 یا *). برای اجرای چیزی هر ۳۰ ثانیه، به cron با ۶ فیلد و یک فیلد ثانیه (Quartz، Spring)، یک اسکریپت wrapper که ۳۰ ثانیه صبر می‌کند و دوباره اجرا می‌شود، یا یک مکانیزم زمان‌بندی متفاوت مانند systemd timer با OnCalendar نیاز دارید.
آیا ۰ معادل ۷ برای فیلد روز هفته است؟
در اکثر پیاده‌سازی‌های cron، هم ۰ و هم ۷ نمایانگر یکشنبه هستند. این قرارداد از cron اصلی Unix آمده است. با این حال، برخی سیستم‌ها (Quartz) از ۱ برای یکشنبه و ۷ برای شنبه استفاده می‌کنند. POSIX محدوده را ۰ تا ۶ با ۰ = یکشنبه تعریف می‌کند. اگر زمان‌بند شما نام روزها را قبول می‌کند (SUN، MON)، از آن‌ها برای جلوگیری از ابهام استفاده کنید.
اگر روز ماهی تنظیم کنم که وجود ندارد چه اتفاقی می‌افتد؟
اگر کاری را برای روز ۳۱ برنامه‌ریزی کنید (0 0 31 * *)، در ماه‌هایی با کمتر از ۳۱ روز اجرا نمی‌شود. cron به ماه بعدی منتقل نمی‌شود. فوریه همیشه رد می‌شود، و ماه‌هایی با ۳۰ روز نیز رد می‌شوند. برای اجرا در آخرین روز هر ماه، برخی پیاده‌سازی‌های cron از اصلاح‌کننده L پشتیبانی می‌کنند (0 0 L * *)، اما cron استاندارد POSIX از آن پشتیبانی نمی‌کند.
چگونه یک عبارت cron را قبل از استقرار آزمایش کنم؟
از یک تجزیه‌کننده آنلاین مانند این استفاده کنید تا زمان‌های اجرای بعدی را ببینید و تأیید کنید که برنامه با هدف شما مطابقت دارد. برای اعتبارسنجی در محیط تولید، اکثر کتابخانه‌های cron یک تابع محاسبه اجرای بعدی ارائه می‌دهند: cron-parser در Node.js، croniter در Python، robfig/cron در Go. عبارت را از طریق یکی از این‌ها در مجموعه آزمون خود اجرا کنید تا N زمان اجرای بعدی را قبل از استقرار بررسی کنید.