تجزیهکننده عبارت 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
۱۰ اجرای بعدی برنامهریزیشده
تجزیه عبارت 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
یک عبارت cron استاندارد پنج فیلد با فاصله دارد. هر فیلد اعداد صحیح، wildcard، محدوده، فهرست و مقادیر گام را میپذیرد. جدول زیر محدوده مجاز و عملگرها را برای هر فیلد نشان میدهد.
| فیلد | محدوده | عملگرها | توضیح |
|---|---|---|---|
| Minute | 0–59 | * , - / | Minute within the hour |
| Hour | 0–23 | * , - / | Hour of the day (24-hour) |
| Day (month) | 1–31 | * , - / | Day of the month |
| Month | 1–12 | * , - / | Month of the year (or JAN–DEC) |
| Day (week) | 0–6 | * , - / | Day of the week (0 = Sunday, or SUN–SAT) |
چهار کاراکتر خاص نحوه تطبیق مقادیر را در هر فیلد کنترل میکنند:
| کاراکتر | نام | رفتار |
|---|---|---|
| * | Wildcard | Matches every possible value in the field. * in the minute field means "every minute." |
| , | List | Separates individual values. 1,15 in the day field means "the 1st and 15th." |
| - | Range | Defines an inclusive range. 1-5 in the day-of-week field means "Monday through Friday." |
| / | Step | Defines 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-5 | Weekdays at 9:00 AM |
| 30 2 * * 0 | Every Sunday at 2:30 AM |
| 0 0 1 * * | First day of every month at midnight |
| 0 0 * * 1 | Every 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-5 | Every hour from 9 AM to 5 PM, weekdays |
نمونههای کد
نحوه تجزیه عبارات cron و محاسبه زمانهای اجرای بعدی در زبانهای محبوب:
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());
}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)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
}# 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"