ToolDeck

تولید‌کننده عبارت Cron

ایجاد عبارات cron به صورت بصری با یک سازنده تعاملی

تنظیمات سریع

دقیقه

ساعت

روز ماه

ماه

روز هفته

عبارت cron

0 9 * * *

minute hour day(month) month day(week)

تولید‌کننده عبارت Cron چیست؟

تولید‌کننده عبارت cron ابزاری است که رشته‌های برنامه‌ریزی cron را از طریق یک رابط بصری می‌سازد تا نیازی به نوشتن دستی آن‌ها نداشته باشید. عبارات cron رشته‌های پنج‌فیلدی هستند (دقیقه، ساعت، روز ماه، ماه، روز هفته) که زمان اجرای یک وظیفه تکرارشونده را تعریف می‌کنند. این قالب از دیمن cron اصلی Unix در سال ۱۹۷۹ سرچشمه می‌گیرد و امروزه در crontab، Kubernetes CronJob‌ها، GitHub Actions، AWS EventBridge، Google Cloud Scheduler و ده‌ها کتابخانه زمان‌بندی کار استفاده می‌شود.

نوشتن عبارات cron از حفظ یکی از دلایل رایج بروز باگ است. پنج فیلد به روش‌های غیر‌واضحی با هم تعامل دارند: یک مقدار گام مانند */15 در فیلد دقیقه اجراهایی در دقایق ۰، ۱۵، ۳۰ و ۴۵ تولید می‌کند، در حالی که 5/15 از دقیقه ۵ شروع می‌شود و دقایق ۵، ۲۰، ۳۵، ۵۰ را می‌دهد. ترکیب روز ماه و روز هفته با مقادیر غیر‌wildcard یک شرط OR ایجاد می‌کند نه AND، که حتی مهندسان باتجربه را غافلگیر می‌کند. یک تولید‌کننده بصری این ابهام را برطرف می‌کند و به شما امکان می‌دهد برنامه مورد نظر را انتخاب کرده و نحو صحیح را به صورت خودکار دریافت کنید.

تولید‌کننده cron با تجزیه‌کننده cron تفاوت دارد. یک تجزیه‌کننده یک عبارت موجود را می‌گیرد و آن را به زبان ساده توضیح می‌دهد. یک تولید‌کننده در جهت عکس کار می‌کند: شما برنامه مورد نیاز را توصیف می‌کنید و ابزار رشته cron متناظر را خروجی می‌دهد. هنگام ایجاد یک کار زمان‌بندی‌شده جدید از تولید‌کننده استفاده کنید؛ هنگام بازبینی یا اشکال‌زدایی کارهای موجود از تجزیه‌کننده استفاده کنید.

چرا از این تولید‌کننده Cron استفاده کنیم؟

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

🖱️
سازنده برنامه بصری
مقادیر دقیقه، ساعت، روز، ماه و روز هفته را از منوهای کشویی و کلیدهای تغییر انتخاب کنید. عبارت cron با تغییر هر فیلد در زمان واقعی به‌روز می‌شود. نیازی به حفظ نحو نیست.
🔒
پردازش کاملاً محلی
تمام فرایند تولید در مرورگر شما اجرا می‌شود. هیچ داده برنامه‌ریزی به سرور ارسال نمی‌شود. عبارات cron و پیکربندی‌های کار شما روی دستگاهتان باقی می‌مانند.
خروجی فوری با پیش‌نمایش
عبارت cron تولید‌شده و پیش‌نمایش زمان‌های اجرای بعدی را هنگام ساخت مشاهده کنید. پیش از کپی کردن در پیکربندی خود، از درستی برنامه مطمئن شوید.
📋
بدون نیاز به حساب کاربری
صفحه را باز کنید و شروع به ساخت کنید. بدون ورود به سیستم، بدون کلید API، بدون نصب. روی هر دستگاهی با مرورگر مدرن، از جمله موبایل، کار می‌کند.

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

توسعه‌دهنده فرانت‌اند
عبارات cron برای پنل‌های مدیریتی و رابط‌های کاربری برنامه‌ریزی بسازید. نحو صحیح برای انتخابگرهای برنامه‌ریزی در رابط کاربری که رشته‌های cron را در پایگاه داده ذخیره می‌کنند تولید کنید.
مهندس بک‌اند
عبارات cron برای صف‌های کار مانند Celery، Sidekiq و Bull ایجاد کنید. رشته برنامه را تولید کنید، زمان‌های اجرای بعدی را تأیید کنید و آن را در پیکربندی کار خود قرار دهید.
DevOps / SRE
برنامه‌های cron برای Kubernetes CronJob‌ها، pipeline‌های CI/CD و اتوماسیون زیرساخت تولید کنید. عبارات برای پنجره‌های پشتیبان‌گیری، تجدید گواهینامه و چرخش لاگ بدون اشتباهات نحوی بسازید.
مهندس QA
عبارات cron آزمایشی بسازید که در بازه‌های زمانی مشخص برای تست یکپارچه‌سازی فعال می‌شوند. برنامه‌هایی با زمان‌های اجرای قابل پیش‌بینی برای اعتبارسنجی رفتار زمان‌بند تولید کنید.
مهندس داده
عبارات cron برای تریگرهای pipeline‌های ETL و برنامه‌های همگام‌سازی داده بسازید. برنامه‌های بدون تداخل برای مراحل استخراج، تبدیل و بارگذاری با زمان‌بندی دقیق تولید کنید.
دانشجو / یادگیرنده
نحو cron را با آزمایش در سازنده بصری یاد بگیرید. فیلدهای جداگانه را تغییر دهید و ببینید عبارت و زمان‌های اجرای بعدی چگونه تغییر می‌کنند. درک شهودی از wildcard‌ها، محدوده‌ها و مقادیر گام به دست آورید.

تنظیمات رایج برنامه 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 در فیلد روز هفته یعنی دوشنبه، چهارشنبه، جمعه (محدوده ۱-۵، گام ۲).

عملگرنحومثالخروجی
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 چیست؟
ترتیب استاندارد پنج‌فیلدی عبارت است از: دقیقه (۰-۵۹)، ساعت (۰-۲۳)، روز ماه (۱-۳۱)، ماه (۱-۱۲)، روز هفته (۰-۶، که ۰ یکشنبه است). این ترتیب توسط POSIX تعریف شده و توسط crontab، Kubernetes، GitHub Actions و اکثر کتابخانه‌های cron استفاده می‌شود. برخی ابزارها مانند Quartz Scheduler یک فیلد ثانیه در ابتدا اضافه می‌کنند که آن را به شش فیلد تبدیل می‌کند، اما چیدمان پنج‌فیلدی پیش‌فرض جهانی است.
چگونه یک عبارت cron برای «هر N دقیقه» تولید کنم؟
از عملگر گام در فیلد دقیقه استفاده کنید: */N. برای هر ۵ دقیقه، بنویسید: */5 * * * *. برای هر ۱۵ دقیقه، بنویسید: */15 * * * *. عملگر گام محدوده فیلد را به طور مساوی تقسیم می‌کند. توجه کنید که */7 اجراهایی هر ۷ دقیقه در مرزهای ساعت تولید نمی‌کند؛ بلکه اجراهایی در دقایق ۰، ۷، ۱۴، ۲۱، ۲۸، ۳۵، ۴۲، ۴۹، ۵۶ تولید می‌کند و سپس در ابتدای ساعت بعدی به ۰ بازمی‌گردد.
آیا می‌توانم یک عبارت cron بسازم که در آخرین روز هر ماه اجرا شود؟
cron استاندارد POSIX عملگر «آخرین روز ماه» ندارد. نمی‌توانید 0 0 L * * را در crontab یا Kubernetes CronJob‌ها بنویسید. راه‌حل‌های جایگزین شامل برنامه‌ریزی برای روزهای ۲۸ تا ۳۱ و افزودن یک بررسی shell ([ $(date +%d -d tomorrow) -eq 01 ])، یا استفاده از یک پیاده‌سازی cron توسعه‌یافته مانند Quartz که از اصلاح‌کننده L پشتیبانی می‌کند، می‌شود. عبارات rate در AWS EventBridge نیز می‌توانند به صورت بومی آخرین روز را هدف بگیرند.
تفاوت بین تولید‌کننده cron و تجزیه‌کننده cron چیست؟
یک تولید‌کننده cron نیازمندی‌های برنامه‌ریزی شما را (مثلاً «هر روز کاری ساعت ۹ صبح») دریافت می‌کند و عبارت cron صحیح را (0 9 * * 1-5) خروجی می‌دهد. یک تجزیه‌کننده cron برعکس عمل می‌کند: یک عبارت موجود را می‌گیرد و توضیح قابل فهم تولید می‌کند. هنگام ایجاد برنامه‌های جدید از تولید‌کننده استفاده کنید. هنگام بازبینی یا اشکال‌زدایی موارد موجود از تجزیه‌کننده استفاده کنید.
چگونه از همپوشانی cron job‌ها جلوگیری کنم؟
cron به خودی خود از اجراهای همپوشان جلوگیری نمی‌کند. اگر یک کار برنامه‌ریزی‌شده برای هر دقیقه ۹۰ ثانیه طول بکشد، دو نمونه همپوشانی خواهند داشت. برای جلوگیری از این، از یک فایل قفل (flock در bash)، یک قفل توزیع‌شده (Redis، etcd)، یا سیاست همزمانی داخلی زمان‌بند خود استفاده کنید. Kubernetes CronJob‌ها یک فیلد concurrencyPolicy دارند که می‌توان آن را روی Forbid یا Replace تنظیم کرد. در زمان‌بندهای سطح برنامه مانند Celery، از solo pool یا قفل سطح وظیفه استفاده کنید.
در cron، ۰ یا ۱ اول هفته است؟
در POSIX cron، ۰ یکشنبه و ۶ شنبه است. هم ۰ و هم ۷ در اکثر پیاده‌سازی‌ها نمایانگر یکشنبه هستند. Quartz Scheduler از قرارداد متفاوتی استفاده می‌کند که ۱ یکشنبه و ۷ شنبه است. اگر سیستم شما از نام روزها پشتیبانی می‌کند (SUN، MON، TUE)، به جای اعداد از آن‌ها استفاده کنید تا از سردرگمی در پلتفرم‌های مختلف جلوگیری شود.
چگونه یک عبارت cron برای یک منطقه زمانی خاص تولید کنم؟
crontab سنتی از منطقه زمانی محلی سیستم استفاده می‌کند. می‌توانید متغیر TZ را در فایل crontab (TZ=America/New_York) روی برخی سیستم‌ها تنظیم کنید. Kubernetes CronJob‌ها از فیلد .spec.timeZone از نسخه ۱.۲۵ پشتیبانی می‌کنند. AWS EventBridge و Google Cloud Scheduler به شما امکان می‌دهند منطقه زمانی را به ازای هر برنامه مشخص کنید. همیشه منطقه زمانی مورد انتظار را در کنار عبارت cron در پیکربندی خود مستند کنید.