مولد تعبيرات 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 للجداول الأكثر استخداماً. معظم مهام الإنتاج تندرج ضمن أحد هذه الأنماط. عدّل الحقول الفردية لتتناسب مع توقيتك الفعلي.
| الجدول | التعبير | الاستخدام النموذجي |
|---|---|---|
| Every minute | * * * * * | Health checks, queue polling |
| Every 5 minutes | */5 * * * * | Metrics collection, cache refresh |
| Every 15 minutes | */15 * * * * | API sync, dashboard updates |
| Every hour | 0 * * * * | Log rotation, report generation |
| Every 6 hours | 0 */6 * * * | Database backups, digest emails |
| Daily at midnight | 0 0 * * * | Nightly batch jobs, cleanup scripts |
| Daily at 9 AM | 0 9 * * * | Daily reports, notification digests |
| Weekdays at 9 AM | 0 9 * * 1-5 | Business-hours tasks, standup reminders |
| Every Monday at midnight | 0 0 * * 1 | Weekly reports, dependency updates |
| First of every month | 0 0 1 * * | Billing runs, monthly aggregation |
| Every Sunday at 2:30 AM | 30 2 * * 0 | Full backups during low-traffic window |
| January 1st at midnight | 0 0 1 1 * | Annual reports, license renewals |
مكوّنات بناء تعبيرات Cron
لكل تعبير cron خمسة حقول بالضبط، تُقرأ من اليسار إلى اليمين. يقبل كل حقل قيماً ومُشغّلات محددة. معرفة هذه القواعد كافية لكتابة أي جدول قد تصادفه في الإنتاج.
أربعة مُشغّلات تتحكم في كيفية مطابقة القيم داخل كل حقل. يمكن دمجها: 1-5/2 في حقل يوم-الأسبوع يعني الاثنين والأربعاء والجمعة (النطاق 1-5، خطوة 2).
| المُشغّل | الصيغة | مثال | النتيجة |
|---|---|---|---|
| Wildcard | * | * (minute) | Every minute |
| List | a,b,c | 1,15 (day) | 1st and 15th |
| Range | a-b | 9-17 (hour) | 9 AM through 5 PM |
| Step | */n | */10 (minute) | Every 10 minutes |
| Range+Step | a-b/n | 10-30/5 (min) | 10, 15, 20, 25, 30 |
أمثلة برمجية
كيفية إنشاء جداول cron وتسجيلها في Node.js و Python و Go و bash:
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"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 timestamppackage 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()
}# 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