Cron Expression Parser
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 Expression Parsing কী?
একটি cron এক্সপ্রেশন হলো স্পেস দ্বারা পৃথক পাঁচটি ক্ষেত্রের একটি স্ট্রিং যা একটি পুনরাবৃত্তিমূলক সময়সূচি নির্ধারণ করে। এই ফরম্যাটটির উৎপত্তি Unix cron daemon-এ, যা Ken Thompson ১৯৭৯ সালে Version 7 Unix-এর জন্য প্রথম লিখেছিলেন। প্রতিটি ক্ষেত্র একটি সময় একক প্রকাশ করে: মিনিট, ঘন্টা, মাসের দিন, মাস এবং সপ্তাহের দিন। একটি cron এক্সপ্রেশন পার্স করা মানে এই সংক্ষিপ্ত নোটেশনকে মানব-পাঠযোগ্য বর্ণনায় এবং আসন্ন কার্যকরী সময়ের একটি সুনির্দিষ্ট তালিকায় রূপান্তরিত করা।
মানক পাঁচ-ক্ষেত্র ফরম্যাটটি Linux এবং macOS-এ crontab, GitHub Actions এবং GitLab CI-এর মতো CI/CD প্ল্যাটফর্ম, AWS (EventBridge), Google Cloud Scheduler এবং Azure Functions-এর ক্লাউড শিডিউলার, এবং প্রতিটি প্রধান প্রোগ্রামিং ভাষার জব-শিডিউলিং লাইব্রেরি ব্যবহার করে। কিছু সিস্টেম সেকেন্ড ক্ষেত্র বা বছর ক্ষেত্র যোগ করে ছয় বা সাত ক্ষেত্রে ফরম্যাট বিস্তৃত করে, কিন্তু POSIX দ্বারা নির্ধারিত পাঁচ-ক্ষেত্র বিন্যাস সকল বাস্তবায়নের ভিত্তি হিসেবে রয়ে যায়।
হাতে cron এক্সপ্রেশন পার্স করা ত্রুটিপ্রবণ। ক্ষেত্রগুলির মধ্যে মিথস্ক্রিয়া অ-সুস্পষ্ট সময়সূচি তৈরি করে: `0 9 1-7 * 1` মানে 'প্রথম সপ্তাহের প্রতি সোমবার' নয়, বরং 'প্রতি মাসের ১ম থেকে ৭ম তারিখ অথবা যেকোনো সোমবার।' একটি cron পার্সার প্রতিটি ক্ষেত্র বিস্তৃত করে, সংমিশ্রণ নিয়ম প্রয়োগ করে এবং জব কখন চালু হবে তার প্রকৃত টাইমস্ট্যাম্প তৈরি করে এই বিভ্রান্তি দূর করে।
কেন এই Cron Parser ব্যবহার করবেন?
একটি কনফিগ ফাইল থেকে `30 */6 1,15 * *`-এর মতো cron এক্সপ্রেশন পড়ে ঠিক কখন এটি চালু হবে তা জানতে পাঁচটি ক্ষেত্র জুড়ে মানসিক গণনা প্রয়োজন। এই পার্সারটি সেই কাজ তাৎক্ষণিকভাবে করে দেয়।
Cron Parser ব্যবহারের ক্ষেত্র
Cron Expression সিনট্যাক্স রেফারেন্স
একটি মানক cron এক্সপ্রেশনে পাঁচটি স্পেস-পৃথক ক্ষেত্র রয়েছে। প্রতিটি ক্ষেত্র পূর্ণসংখ্যা, ওয়াইল্ডকার্ড, রেঞ্জ, তালিকা এবং ধাপ মান গ্রহণ করে। নিচের টেবিলটি প্রতিটি ক্ষেত্রের অনুমোদিত পরিসর ও অপারেটর দেখায়।
| ক্ষেত্র | পরিসর | অপারেটর | বিবরণ |
|---|---|---|---|
| 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"