ToolDeck

Cron এক্সপ্রেশন যাচাইকারী

Cron এক্সপ্রেশন যাচাই করুন এবং বিস্তারিত ক্ষেত্র-দ্বারা-ক্ষেত্র বিশ্লেষণ প্রদর্শন করুন

একটি উদাহরণ চেষ্টা করুন

Cron এক্সপ্রেশন

minute hour day(month) month day(week)

বৈধ cron এক্সপ্রেশন

ক্ষেত্র বিশ্লেষণ

Minute*/15(0–59)

সম্প্রসারিত: 0, 15, 30, 45

Hour0-6(0–23)

সম্প্রসারিত: 0, 1, 2, 3, 4, 5, 6

Day of month1,15(1–31)

সম্প্রসারিত: 1, 15

Month*(1–12)

সম্প্রসারিত: all (1–12)

Day of week1-5(0–6)

সম্প্রসারিত: 1, 2, 3, 4, 5

Cron Expression যাচাইকরণ কী?

Cron expression যাচাইকরণ হলো একটি প্রক্রিয়া যেখানে কোনো cron স্ট্রিং শিডিউলারে পাঠানোর আগে সঠিক সিনট্যাক্স নিয়ম মেনে চলছে কিনা তা পরীক্ষা করা হয়। একটি cron expression পাঁচটি স্পেস-পৃথক ক্ষেত্র (মিনিট, ঘন্টা, মাসের-দিন, মাস, সপ্তাহের-দিন) ব্যবহার করে একটি পুনরাবৃত্তিমূলক সময়সূচি নির্ধারণ করে। যদি কোনো ক্ষেত্রে পরিসরের বাইরে মান, অবৈধ অপারেটর, বা ক্ষেত্রের ভুল সংখ্যার মতো কাঠামোগত ত্রুটি থাকে, তাহলে expression টি হয় ডিপ্লয়ের সময় শিডিউলার দ্বারা প্রত্যাখ্যাত হবে অথবা নীরবে কোনো ট্রিগার সময় খুঁজে পাবে না।

অনলাইনে cron expression যাচাই করা প্রোডাকশনে ডিপ্লয় করে মিসড জবের জন্য অপেক্ষা করার চেয়ে অনেক আগেই ত্রুটি ধরতে পারে। সাধারণ ভুলগুলির মধ্যে রয়েছে ঘন্টা ক্ষেত্রে ২৫ লেখা (বৈধ পরিসর: ০-২৩), শূন্য ধাপ ব্যবহার করা (*/0, যা অনির্ধারিত), পরিসরের সীমা উল্টো করা (1-5 এর পরিবর্তে 5-1), বা Quartz-এর মতো অ-মানক ফরম্যাটের অতিরিক্ত ক্ষেত্র যোগ করা। একটি সিনট্যাক্স চেকার এই সমস্যাগুলি তাৎক্ষণিকভাবে শনাক্ত করে এবং ঠিক কোন ক্ষেত্রটি ভুল তা জানায়।

Cron যাচাইকরণ cron পার্সিং থেকে আলাদা। একটি পার্সার বৈধ expression নিয়ে মানব-পাঠযোগ্য সময়সূচিতে রূপান্তরিত করে। একটি যাচাইকারী একটি সহজ প্রশ্নের উত্তর দেয়: এই expression টি সঠিকভাবে গঠিত কিনা? পার্স করার আগে যাচাই করুন — একটি অবৈধ expression কে শিডিউলারে পাঠানোর কোনো মানে নেই। CI/CD পাইপলাইনে স্বয়ংক্রিয় cron যাচাইকরণ কনফিগ ফাইলে ভাঙা সময়সূচি মার্জ হওয়া রোধ করে।

কেন এই Cron Validator ব্যবহার করবেন?

একটি cron expression-এর কঠোর সিনট্যাক্স নিয়ম রয়েছে, এবং শিডিউলারগুলো সেই নিয়ম ভাঙলে বিভ্রান্তিকর এরর মেসেজ দেয়। কিছু শিডিউলার একটি দুর্বোধ্য ত্রুটি দিয়ে expression প্রত্যাখ্যান করে; অন্যরা নীরবে গ্রহণ করে এবং কখনো চালু হয় না। এই যাচাইকারী ডিপ্লয়ের আগে আপনাকে স্পষ্ট, ক্ষেত্র-অনুযায়ী ডায়াগনস্টিক তথ্য দেয়।

তাৎক্ষণিক সিনট্যাক্স পরীক্ষা
একটি cron expression পেস্ট করুন বা টাইপ করুন এবং সঙ্গে সঙ্গে দেখুন এটি যাচাইকরণ পাস করে কিনা। কোনো ফর্ম সাবমিশন নেই, কোনো বিলম্ব নেই। আপনি টাইপ করার সাথে সাথে ফলাফল আপডেট হয়।
🔒
গোপনীয়তা-অগ্রাধিকার প্রক্রিয়াকরণ
যাচাইকরণ সম্পূর্ণরূপে আপনার ব্রাউজারে চলে। আপনার cron expression এবং শিডিউল কনফিগারেশন কখনো কোনো সার্ভারে পাঠানো বা কোথাও সংরক্ষিত হয় না।
🔍
ক্ষেত্র-অনুযায়ী ত্রুটি রিপোর্ট
কোনো expression অবৈধ হলে, যাচাইকারী শনাক্ত করে কোন ক্ষেত্রটি ত্রুটি সৃষ্টি করেছে এবং কেন। পাঁচটি ক্ষেত্রের মধ্যে কোনটিতে সমস্যা তা অনুমান করতে হবে না।
📋
অ্যাকাউন্ট প্রয়োজন নেই
পেজ খুলুন এবং পরীক্ষা শুরু করুন। কোনো লগইন নেই, কোনো API কী নেই, কোনো ইনস্টলেশন নেই। মোবাইলসহ যেকোনো আধুনিক ব্রাউজার সহ যেকোনো ডিভাইসে কাজ করে।

Cron Validator ব্যবহারের ক্ষেত্র

ফ্রন্টএন্ড ডেভেলপার
শিডিউলিং UI-তে ব্যবহারকারীদের দেওয়া cron expression ডেটাবেসে সংরক্ষণ করার আগে যাচাই করুন। ব্যাকএন্ড প্রত্যাখ্যানের জন্য অপেক্ষা না করে ক্লায়েন্ট পাশেই সিনট্যাক্স ত্রুটি ধরুন।
ব্যাকএন্ড ইঞ্জিনিয়ার
কোড রিভিউ চলাকালীন টাস্ক কিউ কনফিগারেশনে (Celery beat, Hangfire, Quartz) cron expression পরীক্ষা করুন। যাচাই করুন যে পুনর্গঠিত শিডিউল স্ট্রিং এখনো সিনট্যাক্স যাচাইকরণ পাস করে।
DevOps / SRE
Kubernetes CronJob ম্যানিফেস্ট এবং CI/CD পাইপলাইন কনফিগে cron সময়সূচি প্রয়োগ করার আগে যাচাই করুন। ব্যাকআপ সময়সূচিতে একটি টাইপো মিসড ব্যাকআপ না হওয়া পর্যন্ত অলক্ষিত থাকা রোধ করুন।
QA ইঞ্জিনিয়ার
পরীক্ষা করুন যে আপনার অ্যাপ্লিকেশন সঠিকভাবে অবৈধ cron ইনপুট প্রত্যাখ্যান করে। পরিচিত-ভুল expression (পরিসরের বাইরের মান, ভুল ক্ষেত্র সংখ্যা) তৈরি করুন এবং ত্রুটি পরিচালনা সঠিকভাবে কাজ করছে কিনা নিশ্চিত করুন।
ডেটা ইঞ্জিনিয়ার
Airflow DAG এবং dbt নির্ধারিত রানের cron ট্রিগার যাচাই করুন। নিশ্চিত করুন যে YAML বা JSON কনফিগ ফাইল থেকে পার্স করা পাইপলাইন সময়সূচি ডিপ্লয়ের আগে সিনট্যাক্সগতভাবে সঠিক।
শিক্ষার্থী / শিক্ষানবিস
cron সিনট্যাক্স নিয়ে পরীক্ষা-নিরীক্ষা করুন এবং কী বৈধ এবং কী ভাঙে তার তাৎক্ষণিক প্রতিক্রিয়া পান। expression পরীক্ষা করে এবং ত্রুটি বার্তা পড়ে ক্ষেত্রের পরিসর, অপারেটর এবং এজ কেস শিখুন।

সাধারণ Cron সিনট্যাক্স ত্রুটি

নিচের টেবিলে সবচেয়ে ঘন ঘন cron expression ত্রুটি এবং তাদের কারণ তালিকাভুক্ত করা হয়েছে। এগুলো প্রোডাকশন কনফিগ এবং CI/CD পাইপলাইনে বারবার দেখা যায় এমন ভুল।

ত্রুটির ধরনউদাহরণকী ভুল হয়েছে
Too few fields0 9 * *Missing the day-of-week field. Standard cron requires exactly 5 fields.
Too many fields0 0 9 * * 1 2026Extra fields. Some tools add seconds or year, but standard cron uses 5.
Value out of range0 25 * * *Hour field accepts 0-23. Value 25 exceeds the maximum.
Invalid step base0 0 32/2 * *Day-of-month starts at 32, which exceeds the 1-31 range.
Step of zero*/0 * * * *Step value must be 1 or greater. Zero creates an infinite loop.
Empty field0 9 * * 1Double space creates an empty field. Each field needs a value.
Invalid character0 9 * * Mon-FryTypo in day name. Use three-letter abbreviations: MON, TUE, WED, THU, FRI, SAT, SUN.
Reversed range0 9 * * 5-1Range end (1) is less than start (5). Write 1-5 or use a list: 5,6,0,1.

বৈধ বনাম অবৈধ Cron Expression

সাধারণ ভুলের পাশাপাশি সঠিকভাবে গঠিত expression-এর একটি দ্রুত রেফারেন্স। শিডিউলার কনফিগে পেস্ট করার আগে আপনার expression যাচাই করতে এটি ব্যবহার করুন।

বৈধ expression
* * * * *
0 9 * * 1-5
*/15 * * * *
0 0 1,15 * *
30 2 * * 0
0 */6 * * *
অবৈধ expression
0 9 * *৪টি ক্ষেত্র, ৫টি প্রয়োজন
0 25 * * *ঘন্টার সর্বোচ্চ মান ২৩
*/0 * * * *ধাপ ০ হতে পারে না
0 9 * * 8সপ্তাহের-দিনের সর্বোচ্চ মান ৬
60 * * * *মিনিটের সর্বোচ্চ মান ৫৯
0 0 0 * *মাসের-দিনের সর্বনিম্ন মান ১

কোড উদাহরণ

JavaScript, Python, Go এবং Bash-এ প্রোগ্রামগতভাবে cron expression যাচাই করার পদ্ধতি। প্রতিটি উদাহরণ দেখায় কীভাবে অবৈধ সিনট্যাক্স ধরতে হয় এবং অর্থবহ ত্রুটি বার্তা বের করতে হয়।

JavaScript (Node.js)
import { parseExpression } from 'cron-parser';

// Validate a cron expression by attempting to parse it
function validateCron(expr) {
  try {
    parseExpression(expr);
    return { valid: true, error: null };
  } catch (err) {
    return { valid: false, error: err.message };
  }
}

console.log(validateCron('0 9 * * 1-5'));
// → { valid: true, error: null }

console.log(validateCron('0 25 * * *'));
// → { valid: false, error: "Constraint error, got value 25 expected range 0-23" }

// Validate with field-level detail using cron-validator
import { isValidCron } from 'cron-validator';

isValidCron('*/15 * * * *');           // → true
isValidCron('*/15 * * * *', { seconds: true }); // → false (expects 6 fields)
isValidCron('0 0 31 2 *');             // → true (syntactically valid, Feb 31 never fires)
Python
from croniter import croniter

# Validate by checking if croniter can parse the expression
def validate_cron(expr: str) -> dict:
    if croniter.is_valid(expr):
        return {"valid": True, "error": None}
    # Get a more specific error message
    try:
        croniter(expr)
    except (ValueError, KeyError) as e:
        return {"valid": False, "error": str(e)}
    return {"valid": False, "error": "Unknown error"}

print(validate_cron("0 9 * * 1-5"))
# → {'valid': True, 'error': None}

print(validate_cron("0 25 * * *"))
# → {'valid': False, 'error': '...out of range...'}

print(validate_cron("* * *"))
# → {'valid': False, 'error': 'Exactly 5 or 6 columns...'}

# Field-level validation
from crontab import CronTab

cron = CronTab(tab="")
job = cron.new(command="/bin/true")
try:
    job.setall("0 9 * * 1-5")
    print(job.is_valid())  # → True
except Exception as e:
    print(f"Invalid: {e}")
Go
package main

import (
    "fmt"
    "github.com/robfig/cron/v3"
)

// ValidateCron checks whether a 5-field cron expression is syntactically correct
func ValidateCron(expr string) (bool, error) {
    parser := cron.NewParser(
        cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow,
    )
    _, err := parser.Parse(expr)
    if err != nil {
        return false, err
    }
    return true, nil
}

func main() {
    exprs := []string{
        "0 9 * * 1-5",   // valid
        "0 25 * * *",    // invalid: hour 25
        "*/15 * * * *",  // valid
        "0 0 32 * *",    // invalid: day 32
    }

    for _, e := range exprs {
        ok, err := ValidateCron(e)
        if ok {
            fmt.Printf("%-20s  VALID
", e)
        } else {
            fmt.Printf("%-20s  INVALID: %v
", e, err)
        }
    }
}
Bash
#!/bin/bash

# Validate cron syntax using Python one-liner
validate_cron() {
  python3 -c "
from croniter import croniter
import sys
expr = sys.argv[1]
if croniter.is_valid(expr):
    print(f'VALID: {expr}')
    sys.exit(0)
else:
    print(f'INVALID: {expr}')
    sys.exit(1)
" "$1"
}

validate_cron "0 9 * * 1-5"     # → VALID: 0 9 * * 1-5
validate_cron "0 25 * * *"      # → INVALID: 0 25 * * *

# Quick regex pre-check (catches field count and obvious issues)
cron_regex='^([0-9*/,-]+\s+){4}[0-9*/,-]+$'
echo "*/5 * * * *" | grep -Eq "$cron_regex" && echo "passes basic check"
echo "* * *" | grep -Eq "$cron_regex" || echo "fails basic check"

প্রায়শই জিজ্ঞাসিত প্রশ্ন

কী কারণে একটি cron expression অবৈধ হয়?
একটি cron expression অবৈধ হয় যখন এটি পাঁচ-ক্ষেত্র ফরম্যাটের সিনট্যাক্স নিয়ম ভঙ্গ করে। সাধারণ কারণ: ভুল সংখ্যক ক্ষেত্র (মানক cron-এর জন্য ৫-এর কম বা বেশি), অনুমোদিত পরিসরের বাইরে মান (যেমন ঘন্টা ২৫, মিনিট ৬০, মাসের-দিন ০), শূন্য ধাপ (*/0), উল্টো পরিসর সীমা (5-1), বা অচেনা অক্ষর। expression-এ প্রতিটিতে বৈধ মান ও অপারেটর সহ ঠিক পাঁচটি স্পেস-পৃথক ক্ষেত্র থাকতে হবে।
একটি cron expression কি বৈধ হতে পারে যদি এটি কখনো চালু না হয়?
হ্যাঁ, সিনট্যাক্সগতভাবে। `0 0 31 2 *` (ফেব্রুয়ারি ৩১ তারিখ) এর মতো একটি expression সিনট্যাক্স যাচাইকরণ পাস করে কারণ প্রতিটি ক্ষেত্রে অনুমোদিত পরিসরের মধ্যে মান রয়েছে। কিন্তু এটি কখনো ট্রিগার হবে না কারণ ফেব্রুয়ারিতে কখনো ৩১ দিন হয় না। বেশিরভাগ যাচাইকারী শুধুমাত্র সিনট্যাক্স পরীক্ষা করে, অর্থগত সঠিকতা নয়। অপ্রাপ্য সময়সূচি ধরতে হলে, পরবর্তী N রান সময় গণনা করুন এবং তালিকাটি খালি কিনা পরীক্ষা করুন।
৬-ক্ষেত্র বা ৭-ক্ষেত্র cron expression কীভাবে যাচাই করব?
মানক POSIX cron ৫টি ক্ষেত্র ব্যবহার করে। Quartz Scheduler শুরুতে একটি সেকেন্ড ক্ষেত্র যোগ করে (৬ ক্ষেত্র) এবং শেষে একটি ঐচ্ছিক বছর ক্ষেত্র (৭ ক্ষেত্র)। AWS EventBridge ৬টি ক্ষেত্র ব্যবহার করে। এই যাচাইকারী মানক ৫-ক্ষেত্র ফরম্যাট পরীক্ষা করে। Quartz বা EventBridge expression যাচাই করতে, বিস্তৃত ফরম্যাট সমর্থনকারী লাইব্রেরি ব্যবহার করুন, যেমন Node.js-এ `extended` বিকল্প সহ cron-parser বা Java-তে quartz-cron।
cron expression-এ কি নামযুক্ত দিন ও মাস ব্যবহার করা যায়?
বেশিরভাগ cron বাস্তবায়ন মাসের জন্য তিন-অক্ষরের ইংরেজি সংক্ষেপণ (JAN-DEC) এবং সপ্তাহের দিনের জন্য (SUN-SAT) গ্রহণ করে। এগুলো crontab-এ কেস-অসংবেদনশীল তবে অন্য সিস্টেমে কেস-সংবেদনশীল হতে পারে। সব প্ল্যাটফর্মে নামযুক্ত মান পরিসরে ব্যবহার করা যায় না: MON-FRI crontab-এ কাজ করে কিন্তু সব লাইব্রেরিতে নয়। পোর্টেবিলিটি গুরুত্বপূর্ণ হলে, সংখ্যামান ব্যবহার করুন (সোমবার থেকে শুক্রবারের জন্য 1-5)।
আমার cron expression crontab-এ কাজ করে কিন্তু Kubernetes-এ ব্যর্থ হয় কেন?
Kubernetes CronJobs crontab-এর মতো একই ৫-ক্ষেত্র ফরম্যাট ব্যবহার করে কিন্তু Go cron লাইব্রেরি দ্বারা পার্স করা হয়, যার আরও কঠোর যাচাইকরণ রয়েছে। crontab যে expression সহ্য করে (যেমন পেছনের হোয়াইটস্পেস, বা মাসের-দিন এবং সপ্তাহের-দিন উভয়ই নন-ওয়াইল্ডকার্ড মানে সেট) ভিন্নভাবে আচরণ করতে পারে। Kubernetes controller-manager টাইমজোনে (সাধারণত UTC) ডিফল্ট করে, নোডের স্থানীয় টাইমজোনে নয়। সবসময় আপনি যে নির্দিষ্ট শিডিউলারে ডিপ্লয় করছেন সেটার জন্য expression যাচাই করুন।
CI/CD পাইপলাইনে কীভাবে cron expression যাচাই করা উচিত?
ডিপ্লয়ের আগে চলে এমন একটি যাচাইকরণ ধাপ যোগ করুন। একটি Node.js প্রজেক্টে, একটি পরীক্ষা ফাইলে cron-parser বা cron-validator ব্যবহার করুন যা আপনার কনফিগ থেকে cron স্ট্রিং পড়ে এবং ত্রুটি ছাড়া পার্স হয় কিনা যাচাই করে। Python-এ `croniter.is_valid()` ব্যবহার করুন। একটি শেল স্ক্রিপ্টে, যাচাইকরণ ফাংশন কল করুন এবং ব্যর্থ হলে শূন্য-বহির্ভূত কোড দিয়ে বের হন। এটি প্রোডাকশনে পৌঁছানোর আগে টাইপো এবং কপি-পেস্ট ত্রুটি ধরে।
cron যাচাইকরণ এবং cron লিন্টিং-এর মধ্যে পার্থক্য কী?
যাচাইকরণ পরীক্ষা করে expression টি সিনট্যাক্সগতভাবে সঠিক কিনা: সঠিক সংখ্যক ক্ষেত্র, মান পরিসরের মধ্যে, বৈধ অপারেটর। লিন্টিং আরও এগিয়ে যায় প্রযুক্তিগতভাবে বৈধ কিন্তু সম্ভাব্য ভুল বিষয় পরীক্ষা করে: কখনো চালু না হওয়া সময়সূচি (ফেব্রুয়ারি ৩১), ওভারল্যাপিং জব, প্রত্যাশিত ব্যবধান এড়িয়ে যাওয়া ধাপ মান (*/7 প্রতি ঘন্টায় রিসেট হয়), বা টাইমজোন ডকুমেন্টেশন ছাড়া সময়সূচি। যাচাইকরণ উত্তর দেয় 'এটি কি পার্স হবে?' লিন্টিং উত্তর দেয় 'এটি কি সম্ভবত আপনি যা চেয়েছিলেন?'