Skip to content
Cron এক্সপ্রেশন বিল্ডার
Tools

Cron এক্সপ্রেশন বিল্ডার

নতুন

একটি Cron সময়সূচি সহজ ভাষায় ব্যাখ্যা করুন এবং পরবর্তী রান সময় প্রিভিউ করুন।

Cron flavour

Nicknames & common schedules
Visual builder
Meaning

Next runs

    Cron operators & field reference
    Token Meaning Example
    *Every value* * * * *
    ,List of values0 9,17 * * *
    -Range of values0 9 * * 1-5
    /Step (every Nth)*/15 * * * *
    ?No specific value (Quartz / AWS)0 0 12 * * ?
    LLast day / last weekday0 0 L * ?
    WNearest weekday0 0 15W * ?
    #Nth weekday of month0 0 ? * 6#3

    Runs entirely in your browser. Nothing is uploaded.

    যেকোনো ক্রন এক্সপ্রেশন তৈরি ও ডিকোড করুন

    এই ক্রন এক্সপ্রেশন জেনারেটর একসাথে দুইভাবে কাজ করে। ভিজ্যুয়াল ফিল্ড দিয়ে একটি শিডিউল তৈরি করুন এবং এক্সপ্রেশনটি নিজে থেকেই লেখা হয়ে যায়; অথবা একটি এক্সপ্রেশন টাইপ করুন — বা একটি কনফিগ থেকে পেস্ট করুন — আর টুলটি এটিকে সাদামাটা ইংরেজিতে ডিকোড করে, প্রতিটি ফিল্ড যাচাই করে এবং পরবর্তী রান টাইম প্রিভিউ দেখায়। এটি একইসাথে একটি ক্রন বিল্ডার, একটি ক্রনট্যাব জেনারেটর এবং একটি ক্রন এক্সপ্রেশন ভ্যালিডেটর, আর সবকিছু আপনার ব্রাউজারে স্থানীয়ভাবেই ঘটে।

    একটি Linux crontab এন্ট্রি, একটি CI পাইপলাইন, একটি Spring @Scheduled টাস্ক, একটি GitHub Actions ওয়ার্কফ্লো শিডিউল, বা একটি AWS EventBridge নিয়ম শিডিউল করা — আপনি প্রথমবারেই সিনট্যাক্স সঠিক পেতে পারেন, অনুমান করে বারবার ডিপ্লয় করার বদলে।

    পাঁচটি ক্রন ফিল্ড — এবং সেকেন্ড

    একটি স্ট্যান্ডার্ড Unix ক্রন এক্সপ্রেশনে পাঁচটি ফিল্ড থাকে: মিনিট (০–৫৯), ঘণ্টা (০–২৩), মাসের দিন (১–৩১), মাস (১–১২ বা JAN–DEC) এবং সপ্তাহের দিন (০–৬ বা SUN–SAT)। Quartz, Spring এবং Azure সামনে একটি সেকেন্ড ফিল্ড যোগ করে, এবং Quartz ও AWS শেষে একটি ঐচ্ছিক বছর যোগ করে। বিল্ডারটি আপনার বেছে নেওয়া ফ্লেভার যে কলামগুলো ব্যবহার করে ঠিক সেগুলোই দেখায়, তাই আপনি কখনো ফিল্ড গুনতে ভুল করবেন না।

    সপ্তাহের দিন হলো এমন ফিল্ড যা মানুষ সবচেয়ে বেশি ভুল পড়ে। Unix এবং Spring এটিকে ০–৬ দিয়ে নম্বর করে যেখানে ০ = রবিবার (৭-ও রবিবার হিসেবে কাজ করে), আর Quartz এবং AWS এটিকে ১–৭ দিয়ে নম্বর করে যেখানে ১ = রবিবার। এই কারণেই একই সংখ্যা বিভিন্ন সিস্টেমে ভিন্ন দিন বোঝাতে পারে — ডেসক্রিপ্টর সবসময় দিনের নামটি স্পষ্টভাবে বলে দেয়।

    অপারেটর: * , - এবং /

    চারটি অপারেটর প্রায় প্রতিটি শিডিউল কভার করে। অ্যাস্টেরিস্ক * প্রতিটি মান ম্যাচ করে। একটি কমা একটি তালিকা তৈরি করে (1,15 = ১ম এবং ১৫ তারিখ)। একটি হাইফেন একটি রেঞ্জ তৈরি করে (MON-FRI = সপ্তাহের কর্মদিন)। একটি স্ল্যাশ একটি ধাপ যোগ করে (*/10 = প্রতি ১০তম মান; 0/30 = ০ থেকে শুরু করে, প্রতি ৩০তম)। এগুলো মিলিয়ে ব্যবহার করুন — */15 9-17 * * 1-5 মানে \"সপ্তাহের কর্মদিনে সকাল ৯টা থেকে বিকাল ৫টা পর্যন্ত প্রতি ১৫ মিনিটে।\" Quartz এবং AWS L (শেষ), W (নিকটতম কর্মদিন) এবং # (n-তম কর্মদিন)-এর মতো উন্নত টোকেন যোগ করে, যা টুলটি বর্ণনায় ব্যাখ্যা করে।

    একাধিক ক্রন ফ্লেভার: Unix, Quartz, Spring, AWS ও Azure

    বেশিরভাগ অনলাইন টুল শুধু ৫-ফিল্ড Unix ক্রন হ্যান্ডেল করে। এটি Unix/crontab, Quartz (Java, ৬–৭ ফিল্ড), Spring (@Scheduled, ৬ ফিল্ড), AWS EventBridge (বছরসহ ৬ ফিল্ড এবং একটি প্রয়োজনীয় ?) এবং Azure NCRONTAB (৬ ফিল্ড)-এর মধ্যে সুইচ করে। একটি ফ্লেভার বেছে নিলে ফিল্ড সেট, সপ্তাহের দিনের নম্বরায়ন এবং সিনট্যাক্স নিয়ম বদলে যায় — Quartz ও AWS-এর নিয়ম অন্তর্ভুক্ত যে মাসের দিন বা সপ্তাহের দিনের একটি অবশ্যই ? হতে হবে — তাই আপনি এমন একটি এক্সপ্রেশন কপি করেন যা আপনার টার্গেট সিস্টেমে সত্যিই কাজ করে।

    এটি crontab.guru এবং অন্যান্য ক্রন টুলের সাথে কীভাবে তুলনা করে

    Crontab.guru সবচেয়ে পরিচিত ক্রন ডিকোডার, কিন্তু এটি শুধু-পড়া যায় — একটি এক্সপ্রেশন পেস্ট করুন এবং এটি ব্যাখ্যা করে, কিন্তু কোনো ভিজ্যুয়াল বিল্ডার নেই এবং Quartz, Spring, AWS EventBridge বা Azure NCRONTAB সমর্থন করে না। freeformatter.com/cron-expression.html-এর মতো টুল Quartz হ্যান্ডেল করে কিন্তু ভিজ্যুয়াল বিল্ডার এবং পরবর্তী-রান প্রিভিউ নেই। Cronhub এবং Cronitor সম্পূর্ণ ক্রন মনিটরিং প্ল্যাটফর্ম যেগুলোতে একটি এক্সপ্রেশন যাচাই করার আগেই একটি ফ্রি অ্যাকাউন্ট প্রয়োজন হয়।

    এই টুলটি একটি ভিজ্যুয়াল বিল্ডার, সাদামাটা-ইংরেজি ডিকোডার, ফিল্ড-স্তরের ভ্যালিডেশন এবং একটি পরবর্তী-রান টাইমলাইনসহ পাঁচটি ফ্লেভার একটি পেজে কভার করে — কোনো অ্যাকাউন্ট নেই, কোনো আপলোড নেই। এক্সপ্রেশনটি আপনার ব্রাউজারেই থাকে, তাই এটি অভ্যন্তরীণ জব নাম বা সংবেদনশীল শিডিউল কনফিগের জন্য নিরাপদ যা আপনি থার্ড-পার্টি সার্ভারে পাঠাতে চান না।

    পরবর্তী রান টাইম প্রিভিউ করুন এবং সাথে সাথে যাচাই করুন

    পরবর্তী রান টাইম প্যানেল আসল প্রশ্নের উত্তর দেয় — \"এটি আসলে কখন চলবে?\" — আপনার স্থানীয় টাইমজোনে আসন্ন এক্সিকিউশন গণনা করে, যাতে জটিল মাসের-দিন ও সপ্তাহের-দিন সংমিশ্রণে কোনো বিস্ময় না থাকে। কোনো ফিল্ড রেঞ্জের বাইরে থাকলে বা ভুল সংখ্যক মান থাকলে, ভ্যালিডেটর নীরবে ব্যর্থ হওয়ার বদলে সঠিক সমস্যাটি নির্দেশ করে।

    নিকনেম বাটন (@hourly, @daily, @weekly, @monthly, @yearly) বা সাধারণ-শিডিউল গ্যালারি থেকে শুরু করুন — প্রতি ৫, ১৫ বা ৩০ মিনিটে, সকাল ৯টায় কর্মদিন, মাসের ১ তারিখ — তারপর যেকোনো ফিল্ড সূক্ষ্মভাবে সামঞ্জস্য করুন। সমাপ্ত এক্সপ্রেশন কপি করুন, বা একটি শেয়ারযোগ্য লিংক কপি করুন যা আপনার শিডিউল ও ফ্লেভার প্রিলোড করে টুলটি আবার খোলে।

    প্রাইভেট, তাৎক্ষণিক এবং ফ্রি — যেকোনো ডিভাইসে কাজ করে

    ইনস্টল করার কিছু নেই এবং তৈরি করার কোনো অ্যাকাউন্ট নেই। পার্সিং, বর্ণনা, ভ্যালিডেশন এবং পরবর্তী-রান গণনা — সবই আপনার ডিভাইসে জাভাস্ক্রিপ্টে চলে — আপনার এক্সপ্রেশন কখনো আপলোড, লগ বা শেয়ার হয় না। টুলটি আইফোন, অ্যান্ড্রয়েড, Mac, Windows এবং Linux-এ কাজ করে — যেকোনো ব্রাউজারে খুলুন এবং এটি পূর্ণাঙ্গভাবে কাজ করে। প্রতিটি ফ্লেভার জুড়ে ক্রন শিডিউল পড়া, লেখা ও দুইবার যাচাই করার জন্য এই ক্রন এক্সপ্রেশন জেনারেটর বুকমার্ক করে রাখুন।

    ক্রনের ইতিহাস: Bell Labs থেকে ক্লাউড পর্যন্ত

    ক্রন ডেমন Bell Labs-এ Ken Thompson লিখেছিলেন এবং Unix Version 7-এ ১৯৭৯ সালে চালু হয়। নামটি গ্রিক Chronos থেকে এসেছে, সময়ের গ্রিক প্রতিরূপ — একটি ডেমনের জন্য উপযুক্ত শ্রদ্ধাঞ্জলি যার সম্পূর্ণ উদ্দেশ্যই সুনির্দিষ্ট মুহূর্তে কাজ করা। Thompson-এর মূল বাস্তবায়ন ছিল একটি একক সিস্টেম ডেমন: এটি প্রতি মিনিটে একবার জেগে উঠত, শিডিউল করা কমান্ডের একটি হার্ড-কোডেড তালিকা স্ক্যান করত, এবং যে কোনো জবের সময় এসেছে তার জন্য একটি চাইল্ড প্রসেস ফর্ক করত। ধারণাটি এতই সহজ ছিল যে হাতে গোনা কয়েকটি C ফাংশনে ফিট করত, তবুও এতই শক্তিশালী যে মূল মডেল ৪৫ বছরে খুব একটা বদলায়নি।

    crond ডেমন OS-স্তরে আজও ঠিক একইভাবে কাজ করে। স্টার্টআপে এটি প্রতিটি ব্যবহারকারীর ব্যক্তিগত crontab ফাইল (crontab -e দিয়ে সম্পাদিত), /etc/cron.d/-এ প্রতি-প্যাকেজ ড্রপ-ইন ফাইল, এবং সিস্টেম-স্তরের /etc/crontab পড়ে — যা একটি অতিরিক্ত ব্যবহারকারী কলাম যোগ করে যাতে সিস্টেম জানে প্রতিটি জব কোন অ্যাকাউন্ট হিসেবে চালাতে হবে। প্রতি মিনিটে crond বর্তমান ওয়াল-ক্লক সময়কে প্রতিটি এক্সপ্রেশনের সাথে তুলনা করে; সব পাঁচটি ফিল্ড মিলে গেলে, এটি একটি চাইল্ড ফর্ক করে, এনভায়রনমেন্ট ভেরিয়েবল সেট করে, এবং কমান্ড এক্সিকিউট করে। সরলতাটি ইচ্ছাকৃত: ক্রনের কোনো রিট্রাই লজিক নেই, কোনো নির্ভরতা রেজোলিউশন নেই, এবং আগের রান এখনও চলছে কিনা তার কোনো দৃশ্যমানতা নেই।

    আধুনিক Linux ডিস্ট্রিবিউশনগুলো ধীরে ধীরে ক্রনকে systemd টাইমার দিয়ে প্রতিস্থাপন করছে, যা জার্নালের সাথে লগিংয়ের জন্য ইন্টিগ্রেট করে, মনোটোনিক (অতিবাহিত-সময়) শিডিউল সমর্থন করে, এবং ইউনিটের মধ্যে নির্ভরতা ঘোষণা করতে পারে। কিন্তু ক্রন এক্সপ্রেশন অন্য সব জায়গায় টিকে আছে — ক্লাউড শিডিউলার, CI সিস্টেম, কন্টেইনার অর্কেস্ট্রেটর এবং অ্যাপ্লিকেশন ফ্রেমওয়ার্কে — কারণ পাঁচ-ফিল্ড সিনট্যাক্স এতটাই সুপরিচিত যে এটি ছেড়ে দেওয়া বাঁচানোর চেয়ে বেশি খরচ করবে।

    ৫-ফিল্ড, ৬-ফিল্ড এবং ৭-ফিল্ড ক্রন: কেন একই স্ট্রিং বিভিন্ন প্ল্যাটফর্মে ভিন্ন আচরণ করে

    স্ট্যান্ডার্ড Unix ক্রনে ঠিক পাঁচটি ফিল্ড থাকে (মিনিট, ঘণ্টা, মাসের দিন, মাস, সপ্তাহের দিন)। অনেক আধুনিক প্ল্যাটফর্ম পজিশন শূন্যে একটি সেকেন্ড ফিল্ড প্রিপেন্ড করে, ছয়-ফিল্ডের একটি এক্সপ্রেশন তৈরি করে। Jenkins, Spring @Scheduled, Azure Functions NCRONTAB এবং অনেক ক্লাউড শিডিউলার এই ছয়-ফিল্ড ফর্ম ব্যবহার করে। Quartz Scheduler (প্রভাবশালী Java জব-শিডিউলিং লাইব্রেরি) ছয়টি ফিল্ড এবং ঐচ্ছিকভাবে শেষে একটি সপ্তম বছর ফিল্ড ব্যবহার করে। AWS EventBridge (পূর্বে CloudWatch Events)-ও ছয়টি ফিল্ড ব্যবহার করে কিন্তু এর ষষ্ঠ ফিল্ড সেকেন্ড নয়, বছর — এটিকে সবচেয়ে ভিন্ন ফরম্যাট করে তোলে।

    এটি প্রকৃত অস্পষ্টতা তৈরি করে। এক্সপ্রেশন 0 * * * * একটি পাঁচ-ফিল্ড Unix crontab-এ \"প্রতি ঘণ্টার মিনিট ০-এ\" (প্রতি ঘণ্টায়) বোঝায়। সেই একই স্ট্রিং এমন একটি সিস্টেমে পেস্ট করুন যার পার্সার ছয়টি ফিল্ড প্রত্যাশা করে এবং এটি নীরবে পুনর্ব্যাখ্যা হয়ে যায়: 0 সেকেন্ড ফিল্ড হয়ে যায় এবং * মিনিট ফিল্ড হয়ে যায়, তাই জবটি ঘণ্টা ০-এর প্রতি মিনিটের প্রতি সেকেন্ডে চলে — ঘণ্টায় একবারের বদলে রাতে ৩,৬০০ বার। প্ল্যাটফর্মের মধ্যে একটি এক্সপ্রেশন কপি করার আগে সবসময় নিশ্চিত করুন আপনার টার্গেট সিস্টেম কতগুলো ফিল্ড প্রত্যাশা করে। এই টুলের ফ্লেভার সিলেক্টর স্বয়ংক্রিয়ভাবে ফিল্ড সংখ্যা সামঞ্জস্য করে এবং কলামগুলো লেবেলযুক্ত রাখে যাতে আপনি কখনো ফিল্ড গুনতে ভুল না করেন।

    Quartz-এ Unix ক্রনে অনুপলব্ধ উন্নত টোকেনও রয়েছে: L মানে \"শেষ\" (মাসের শেষ দিন, বা শেষ শুক্রবার), W একটি নির্দিষ্ট তারিখের নিকটতম কর্মদিন নির্বাচন করে (15W ১৫ তারিখ কর্মদিন হলে সেদিন চলে, নয়তো নিকটতম সোমবার বা শুক্রবার), এবং # মানে \"n-তম ঘটনা\" (2#1 মাসের প্রথম সোমবার)। AWS EventBridge L এবং ? সমর্থন করে কিন্তু W বা # নয়। এই টোকেনগুলো শক্তিশালী কিন্তু প্ল্যাটফর্ম-নির্দিষ্ট — যদি আপনি এমন একটি ফ্লেভারে সুইচ করেন যা সেগুলো চিনতে পারে না, টুলটি সেগুলো অসমর্থিত হিসেবে চিহ্নিত করে।

    সাধারণ ক্রন প্যাটার্ন এবং তার পেছনের ব্যবসায়িক যুক্তি

    বেশিরভাগ প্রোডাকশন ক্রন জব একটি নির্দিষ্ট বাস্তব ব্যবসায়িক ছন্দের সাথে মিলিয়ে বেছে নেওয়া কয়েকটি প্রামাণিক প্যাটার্নের চারপাশে জড়ো হয়। 0 2 * * * — প্রতিদিন রাত ২টায় — ডেটাবেস ব্যাকআপের ক্লাসিক স্লট: ট্র্যাফিক তার রাতের সর্বনিম্নে থাকে, রেপ্লিকা ল্যাগ ন্যূনতম, এবং সকালের চূড়ার আগে একটি দীর্ঘ-চলমান ডাম্প শেষ হওয়ার জন্য উইন্ডোটি যথেষ্ট বড়। 0 9 * * 1-5 সপ্তাহের সকাল ৯টাকে টার্গেট করে এমন জবের জন্য যেগুলো শুধু ব্যবসায়িক সময়েই অর্থবহ — একটি দৈনিক ডাইজেস্ট ইমেইল পাঠানো, স্টাফ লগইন করার আগে একটি ক্যাশ ওয়ার্ম করা, বা একটি রিপোর্ট ট্রিগার করা যা একজন ম্যানেজার তার ডেস্কে পড়বেন। 0 0 1 * * প্রতি মাসের ১ তারিখ মধ্যরাতে বিলিং রান, মাসিক অ্যাগ্রিগেট রিপোর্ট, বা SLA রিসেটের জন্য চালু হয়। 0 0 * * 0 প্রতি রবিবার মধ্যরাতে ভারী সাপ্তাহিক পরিষ্কারের জন্য চলে — সফট-ডিলিট করা রেকর্ড মুছে ফেলা, একটি সার্চ ইঞ্জিন পুনরায় ইনডেক্স করা, বা লগ আর্কাইভ ঘোরানো।

    ছোট সময়ের জন্য ভিন্ন ব্যবহার আছে। */15 * * * * (প্রতি ১৫ মিনিটে) স্ট্যান্ডার্ড হেলথ-চেক বা মেট্রিক্স-পুশ ছন্দ: একটি আউটেজ দ্রুত ধরার জন্য যথেষ্ট ঘন ঘন, একটি ডাউনস্ট্রিম API-কে বেশি চাপ না দেওয়ার জন্য যথেষ্ট কম ঘন ঘন। 0 8 1,15 * * — ১ এবং ১৫ তারিখ সকাল ৮টায় — একটি দ্বি-মাসিক পেরোল সাইকেলকে প্রতিফলিত করে। Quartz এক্সপ্রেশন 30 5 L * ? প্রতি মাসের শেষ দিনে ভোর ৫:৩০-এ চলে, মাস-শেষ ক্লোজিং জবের জন্য উপযোগী যেগুলো মাসটির ২৮, ২৯, ৩০ বা ৩১ দিন থাকুক না কেন চালাতে হবে।

    একটি এজ কেস অনেক ইঞ্জিনিয়ারকে বিভ্রান্ত করে: একটি নির্দিষ্ট মাসের চেয়ে বেশি মাসের-দিন মান নীরবে বাদ দেওয়া হয়। 0 0 31 * * দিয়ে ৩১ তারিখে একটি জব শিডিউল করার মানে হলো এটি ফেব্রুয়ারি, এপ্রিল, জুন, সেপ্টেম্বর বা নভেম্বরে কখনো চলে না। প্রকৃত মাস-শেষ কভারেজ প্রয়োজন হলে, Quartz-এর L টোকেন ব্যবহার করুন বা ২৮ তারিখে চালানো এবং আজ সত্যিই মাসের শেষ দিন কিনা তা নির্ধারণ করতে অ্যাপ্লিকেশন-স্তরের লজিক প্রয়োগ করার দিকে ফিরে যান।

    ক্লাউড ও সার্ভারলেস পরিবেশে ক্রন

    AWS EventBridge Scheduler (CloudWatch Events-এর উত্তরসূরি) দুই ধরনের এক্সপ্রেশন অফার করে: rate(1 hour)-এর মতো একটি মানুষের-পঠনযোগ্য rate() এক্সপ্রেশন, এবং একটি বছর ফিল্ডসহ একটি ছয়-ফিল্ড ক্রন এক্সপ্রেশন। ২০২২ সাল থেকে EventBridge নেটিভভাবে IANA টাইমজোন নাম সমর্থন করে, যার অর্থ আপনি নিজে UTC অফসেট গণনা করে এবং ডে-লাইট সেভিং টাইমের চারপাশে বছরে দুইবার তা পুনরায় সম্পাদনা করার বদলে 09:00 America/New_York-এর জন্য একটি জব শিডিউল করতে পারেন। GCP Cloud Scheduler-ও IANA টাইমজোন নাম সমর্থন করে এবং একটি Quartz-ধাঁচের ছয়-ফিল্ড ফরম্যাট ব্যবহার করে। Azure Logic Apps তার লো-কোড ডিজাইনারে একটি রিকারেন্স ট্রিগারের মাধ্যমে শিডিউলিং প্রকাশ করে, কিন্তু ভেতরে ভেতরে এটি কোড ভিউতে সুইচ করলে NCRONTAB (ছয়-ফিল্ড, সেকেন্ড-প্রথম) স্ট্রিং গ্রহণ করে।

    GitHub Actions on: schedule একটি স্ট্যান্ডার্ড পাঁচ-ফিল্ড UTC ক্রন এক্সপ্রেশন ব্যবহার করে যার প্ল্যাটফর্ম ন্যূনতম ব্যবধান পাঁচ মিনিট — GitHub স্পষ্টভাবে এমন এক্সপ্রেশন ব্লক করে যা এর চেয়ে বেশি ঘন ঘন চলবে। বাস্তবে, ভারী লোডযুক্ত রানারের মানে হলো শিডিউল করা সময় এবং জব শুরুর মধ্যে প্রকৃত বিলম্ব পিক পিরিয়ডে ১৫ থেকে ৩০ মিনিট পর্যন্ত হতে পারে, তাই GitHub Actions শিডিউল সময়-সংবেদনশীল যেকোনো কিছুর জন্য অনুপযুক্ত। Kubernetes CronJob পাঁচ-ফিল্ড এক্সপ্রেশন এবং @daily, @weekly, @hourly@monthly শর্টহ্যান্ড গ্রহণ করে, এবং ক্লাস্টারের kube-controller-manager প্রসেসের টাইমজোন ব্যবহার করে — একটি সাধারণ বিস্ময়ের উৎস যখন একটি ক্লাস্টার UTC-তে চলে কিন্তু টিম স্থানীয় সময় প্রত্যাশা করেছিল। Kubernetes 1.27 অনুযায়ী spec.timeZone ফিল্ড স্থিতিশীল হয়ে ওঠে, প্রতি-CronJob IANA টাইমজোন নিয়ন্ত্রণ সক্ষম করে। Heroku Scheduler সবচেয়ে সীমাবদ্ধ: এটি শুধু তিনটি নির্দিষ্ট ব্যবধান (প্রতি ১০ মিনিটে, প্রতি ঘণ্টায়, বা প্রতিদিন) সহ একটি GUI অফার করে এবং একেবারেই ক্রন সিনট্যাক্স গ্রহণ করে না।

    ক্রন বনাম মেসেজ কিউ বনাম ইভেন্ট-চালিত শিডিউলিং: সময়-ভিত্তিক শিডিউলিং কখন ভুল টুল

    ক্রন সময়-ট্রিগার করা: এটি একটি নির্দিষ্ট ক্লক সময়ে চালু হয়, সিস্টেম লোডের অধীনে আছে কিনা, আগের রান শেষ হয়েছে কিনা, বা আসলে করার মতো কোনো কাজ আছে কিনা তা নির্বিশেষে। প্রকৃত পর্যায়ক্রমিক কাজের জন্য — লগ ঘোরানো, টোকেন মেয়াদ শেষ করা, একটি শিডিউল করা নিউজলেটার পাঠানো — এই সরলতা একটি গুণ, কিন্তু কাজের পরিমাণ পরিবর্তনশীল হলে এটি একটি দায় হয়ে ওঠে। \"আজ তৈরি হওয়া সব রেকর্ড প্রক্রিয়া করে\" এমন একটি রাতের ব্যাচ জব শুধু কাকতালীয়ভাবে সঠিক-আকারের হয়; একটি শান্ত রাতে এটি সেকেন্ডে শেষ হয়, একটি ব্যস্ত রাতে এটি ঘণ্টার পর ঘণ্টা চলে এবং সম্ভবত পরবর্তী শিডিউল করা রানের সাথে ওভারল্যাপ করে।

    প্রামাণিক বিকল্প হলো একটি মেসেজ কিউ: রেকর্ড তৈরি হওয়ার সময় সারিবদ্ধ হয়, এবং কর্মীরা ক্রমাগত সারি থেকে টেনে নেয়। সিস্টেমটি লোডের অধীনে স্ব-নিয়ন্ত্রিত হয়, শান্ত রাতে কোনো অপচয়িত খালি রান হয় না, এবং ব্যর্থতাগুলো স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা করা হয়। Python-এ, Celery Beat উভয় জগতের সেতুবন্ধন করে — এটি পর্যায়ক্রমে টাস্ক সারিবদ্ধ করতে ক্রন-এর মতো শিডিউল ব্যবহার করে যা তারপর কর্মীরা অ্যাসিঙ্ক্রোনাসভাবে প্রক্রিয়া করে। Sidekiq Scheduler Ruby-তে একই কাজ করে। Node.js-এ, Bull এবং BullMQ Redis-সমর্থিত পুনরাবৃত্তিযোগ্য জব সমর্থন করে, ক্রন স্ট্রিং সিনট্যাক্স এবং একাধিক ইনস্ট্যান্স জুড়ে ডুপ্লিকেট ফায়ারিং প্রতিরোধ করতে স্বয়ংক্রিয় লিডার-ইলেকশনসহ।

    মাল্টি-ইনস্ট্যান্স সমস্যাটি ক্রনের গভীরতম স্কেলিং ত্রুটি: আপনি যদি একটি অ্যাপ্লিকেশনের তিনটি ইনস্ট্যান্স ডিপ্লয় করেন এবং প্রতিটিতে একই ক্রন জব ওয়্যার করা থাকে, জবটি একযোগে তিনবার চালু হয়। সমাধানগুলোর মধ্যে রয়েছে একটি ডিস্ট্রিবিউটেড লক (প্রতিটি রান শুরুতে একটি Redis বা ডেটাবেস লক অর্জন করা, ইতিমধ্যে ধরে রাখা থাকলে স্কিপ করা) থেকে শুরু করে একটি ডেডিকেটেড শিডিউলার প্রসেস যা সব ক্রন লজিকের মালিক এবং ফ্লিটের কাছে কাজ পাঠায়। Inngest, Trigger.dev এবং Quirrel-এর মতো সার্ভারলেস প্ল্যাটফর্ম বাহ্যিকভাবে শিডিউলার হোস্ট করে এবং শিডিউল করা সময়ে আপনার ফাংশনে একটি একক HTTP কল পাঠিয়ে এটি সমাধান করে — আপনার কোড কোনো লকিং লজিক ছাড়াই অনুভূমিকভাবে স্কেল করে। সঠিক মানসিক মডেল: শিডিউলটি নিজেই সত্যের উৎস হলে ক্রন ব্যবহার করুন; ডেটার আগমন সত্যের উৎস হলে একটি কিউ ব্যবহার করুন।

    Frequently asked questions

    ক্রন এক্সপ্রেশন কী?

    একটি ক্রন এক্সপ্রেশন হলো ফিল্ডের একটি ছোট স্ট্রিং যা একটি শিডিউলারকে — Unix cron, Quartz, Spring, AWS EventBridge, Azure Functions — ঠিক কখন একটি জব চালাতে হবে তা বলে। একটি ক্লাসিক Unix ক্রন এক্সপ্রেশনে পাঁচটি স্পেস-সেপারেটেড ফিল্ড থাকে: মিনিট, ঘণ্টা, মাসের দিন, মাস এবং সপ্তাহের দিন। উদাহরণস্বরূপ, '*/15 9-17 * * 1-5' মানে সোমবার থেকে শুক্রবার সকাল ০৯:০০ থেকে বিকাল ০৫:০০-এর মধ্যে প্রতি ১৫ মিনিটে। উপরের বিল্ডারটি আপনার পছন্দগুলোকে এক্সপ্রেশনে রূপান্তরিত করে এবং স্বয়ংক্রিয়ভাবে সাদামাটা ইংরেজিতে ব্যাখ্যা করে দেয়।

    আমি কীভাবে একটি ক্রন এক্সপ্রেশন পড়ব?

    বাম থেকে ডানে, একবারে একটি ফিল্ড করে পড়ুন। '0 9 * * 1' নিন: মিনিট ০, ঘণ্টা ৯, মাসের দিন * (যেকোনো), মাস * (যেকোনো), এবং সপ্তাহের দিন ১ (সোমবার) — তাই এটি প্রতি সোমবার সকাল ০৯:০০-এ চলে। একটি অ্যাস্টেরিস্ক মানে সেই ফিল্ডের 'প্রতিটি মান'। Quartz এবং Spring সামনে একটি সেকেন্ড ফিল্ড যোগ করে, তাই তাদের এক্সপ্রেশন একটি ষষ্ঠ মান দিয়ে শুরু হয়। যেকোনো এক্সপ্রেশন এই টুলে পেস্ট করুন এবং এটি প্রতিটি ফিল্ড সাদামাটা ইংরেজিতে ব্যাখ্যা করবে, প্রতিবার হাতে ক্রন সিনট্যাক্স পড়ার ঝামেলা বাঁচাবে।

    ৫টি ক্রন ফিল্ডের অর্থ কী?

    ক্রমানুসারে: মিনিট (০–৫৯), ঘণ্টা (০–২৩), মাসের দিন (১–৩১), মাস (১–১২, বা JAN–DEC) এবং সপ্তাহের দিন (০–৬, যেখানে ০ এবং ৭ রবিবার, বা SUN–SAT)। তাই '30 8 1 * *' পড়া হয় মিনিট ৩০, ঘণ্টা ৮, দিন ১, যেকোনো মাস, যেকোনো সপ্তাহের দিন — অর্থাৎ, প্রতি মাসের ১ তারিখ সকাল ০৮:৩০-এ। উপরের প্রতিটি বিল্ডার কলাম এই ফিল্ডগুলোর একটির সাথে সংশ্লিষ্ট, অবস্থানের ক্রম মুখস্থ না করেই সঠিক মান সেট করা সহজ করে তোলে।

    ক্রনে *, */, , এবং - এর অর্থ কী?

    এগুলো ক্রন অপারেটর। একটি অ্যাস্টেরিস্ক (*) একটি ফিল্ডের 'প্রতিটি' মান বোঝায়। একটি কমা একটি তালিকা তৈরি করে: '1,15' মানে ১ম এবং ১৫ তারিখ। একটি হাইফেন একটি রেঞ্জ তৈরি করে: '1-5' মানে ১ থেকে ৫। একটি স্ল্যাশ একটি ধাপ যোগ করে: '*/15' মানে প্রতি ১৫তম মান (০, ১৫, ৩০, ৪৫) এবং '9-17/2' মানে ৯ থেকে ১৭ পর্যন্ত প্রতি ২ ঘণ্টা। উদাহরণ: '0 0,12 * * *' প্রতিদিন মধ্যরাত ও দুপুরে চলে। উপরের ডেসক্রিপ্টর আপনি তৈরি করার সময় প্রতিটি অপারেটরের ইংরেজি অর্থ দেখায়।

    প্রতি ৫ মিনিটে ক্রন এক্সপ্রেশন কী?

    '*/5 * * * *' ব্যবহার করুন — মিনিট ফিল্ডে '*/5' মানে প্রতি ৫ম মিনিট (০০:০০, ০০:০৫, ০০:১০, এবং তারপর)। অন্যান্য সাধারণ ব্যবধান: প্রতি ১৫ মিনিটে '*/15 * * * *', প্রতি ৩০ মিনিটে '*/30 * * * *', এবং প্রতি ঘণ্টায় '0 * * * *'। উপরে একটি কুইক-শিডিউল চিপে ক্লিক করলে এগুলোর যেকোনোটি স্বয়ংক্রিয়ভাবে বসে যায়। পরবর্তী-রান প্রিভিউ তখন ঠিক দেখায় জবটি কখন চালু হবে, তাই এক্সপ্রেশন কপি করার আগে আপনি নিশ্চিত হতে পারেন এটি আপনার উদ্দেশ্য।

    ৬- বা ৭-ফিল্ড (Quartz) ক্রন এক্সপ্রেশন কী?

    Quartz এবং Spring সবচেয়ে সামনে একটি সেকেন্ড ফিল্ড রাখে, ছয়টি ফিল্ড তৈরি করে: সেকেন্ড, মিনিট, ঘণ্টা, মাসের দিন, মাস, সপ্তাহের দিন। Quartz বছরের জন্য একটি ঐচ্ছিক সপ্তম ফিল্ডও নিতে পারে। উদাহরণস্বরূপ '0 0 12 * * ?' মানে প্রতিদিন ১২:০০:০০-এ, এবং '0 0 12 * * ? 2026' এটিকে ২০২৬ সালে সীমাবদ্ধ করে। ফ্লেভার সিলেক্টর Quartz-এ সুইচ করুন এবং বিল্ডার স্বয়ংক্রিয়ভাবে অতিরিক্ত কলাম যোগ করে, এমন সিস্টেমে ৫-ফিল্ড এক্সপ্রেশন লেখার সাধারণ ভুল প্রতিরোধ করে যেখানে ৬টি প্রয়োজন।

    ক্রনে ৫ মানে কী?

    এটি নির্ভর করে এটি কোন ফিল্ডে আছে তার ওপর। মিনিট ফিল্ডে, ৫ মানে মিনিট ৫; ঘণ্টা ফিল্ডে এটি মানে ০৫:০০। একটি Unix এক্সপ্রেশনের সপ্তাহের-দিন ফিল্ডে, ৫ মানে শুক্রবার (Unix ০=রবিবার থেকে ৬=শনিবার পর্যন্ত গণনা করে)। তাই '0 5 * * 5' মানে প্রতি শুক্রবার ০৫:০০-এ। সাবধান: Quartz এবং AWS সপ্তাহের-দিন ১–৭ দিয়ে গণনা করে যেখানে ১=রবিবার, তাই সেখানে ৫ মানে বৃহস্পতিবার — উপরের ডেসক্রিপ্টর সবসময় এই বিভ্রান্তি এড়াতে দিনের নাম বানান করে।

    Unix, Quartz, Spring এবং AWS ক্রনের মধ্যে পার্থক্য কী?

    প্রধানত ফিল্ডের সংখ্যা এবং সপ্তাহের-দিন কীভাবে নম্বর করা হয় তাতে। Unix/crontab ৫টি ফিল্ড ব্যবহার করে (সেকেন্ড নেই), সপ্তাহের দিন ০–৬ যেখানে ০=রবিবার। Quartz ৬ বা ৭টি ফিল্ড ব্যবহার করে (সেকেন্ড প্রথমে, ঐচ্ছিক বছর), সপ্তাহের দিন ১–৭ যেখানে ১=রবিবার, এবং মাসের দিন বা সপ্তাহের দিনের একটিতে '?' প্রয়োজন। Spring Quartz-এর মতো ৬টি ফিল্ড ব্যবহার করে (সেকেন্ড প্রথমে) কিন্তু Unix-ধাঁচের ০–৭ সপ্তাহের দিন বজায় রাখে। AWS EventBridge বছরসহ ৬টি ফিল্ড ব্যবহার করে এবং একটি '?'-ও প্রয়োজন। Azure NCRONTAB ০–৬ সপ্তাহের দিনসহ ৬টি ফিল্ড ব্যবহার করে। উপরে ফ্লেভার বেছে নিন এবং টুলটি সব ফিল্ড ও সিনট্যাক্স নিয়ম সামঞ্জস্য করে।

    আমি কীভাবে প্রতিদিন মধ্যরাতে একটি জব চালাব?

    '0 0 * * *' ব্যবহার করুন — মিনিট ০, ঘণ্টা ০, প্রতিদিন। Quartz বা Spring-এ (যা সামনে একটি সেকেন্ড ফিল্ড রাখে) এটি হয়ে যায় '0 0 0 * * ?'। ডাকনাম @daily (@midnight-ও) Vixie-cron-এর শর্টহ্যান্ড একই জিনিসের জন্য। উপরে @daily-তে ক্লিক করে এক ট্যাপে এটি সেট করুন, তারপর Quartz বা AWS সংস্করণ প্রয়োজন হলে ফ্লেভার সিলেক্টর সুইচ করুন — এক্সপ্রেশন স্বয়ংক্রিয়ভাবে আপনার সিস্টেমের সঠিক সিনট্যাক্সে আপডেট হয়।

    @daily, @hourly, @weekly এবং @reboot কী?

    এগুলো ক্রন নিকনেম — পঠনযোগ্য শর্টকাট যা Vixie cron এবং Spring সমর্থন করে। @hourly সমান '0 * * * *', @daily (বা @midnight) সমান '0 0 * * *', @weekly সমান '0 0 * * 0', @monthly সমান '0 0 1 * *', এবং @yearly (বা @annually) সমান '0 0 1 1 *'। @reboot বিশেষ: এটি ক্রন সার্ভিস শুরু হলে একবার চলে, কোনো ঘড়ির ওপর নয়, তাই এর কোনো 'পরবর্তী রান' সময় নেই। Quartz, AWS এবং Azure নিকনেম গ্রহণ করে না — সেসব সিস্টেমে সংখ্যাসূচক রূপ ব্যবহার করুন।

    30 4 1,15 * 5 এর অর্থ কী?

    ফিল্ড অনুযায়ী: মিনিট ৩০ এবং ঘণ্টা ৪ মানে ০৪:৩০; মাসের দিন ১,১৫ (১ম এবং ১৫ তারিখ); মাস * (যেকোনো মাস); সপ্তাহের দিন ৫ (শুক্রবার)। যেহেতু মাসের দিন এবং সপ্তাহের দিন উভয়ই সীমাবদ্ধ, স্ট্যান্ডার্ড ক্রন জবটি চালায় যখন যেকোনো একটি ম্যাচ করে — তাই এটি প্রতি মাসের ১ ও ১৫ তারিখ ০৪:৩০-এ, এবং প্রতি শুক্রবার চলে। এই ক্লাসিক উদাহরণটি প্রায়ই '30 4 1,15 * 5' লেখা হয়; বর্ণনা ও পরবর্তী রান দেখতে উপরে পেস্ট করুন।

    আমার ক্রন পরবর্তী কখন চলবে তা কীভাবে দেখব?

    উপরের Next runs প্যানেল সম্পূর্ণভাবে আপনার ব্রাউজারে আসন্ন ফায়ার টাইম গণনা করে এবং সেগুলো আপনার স্থানীয় টাইমজোনে দেখায় (স্বয়ংক্রিয়ভাবে শনাক্ত)। মনে রাখবেন অনেক সার্ভার UTC-তে ক্রন চালায়, তাই '0 9 * * *'-এ সেট করা একটি জব আপনার জন্য ভিন্ন ওয়াল-ক্লক সময়ে চালু হতে পারে — শিডিউলটি চালানোর আগে প্রিভিউ করা স্থানীয় সময়গুলো আপনার সার্ভারের টাইমজোনের সাথে তুলনা করুন। প্যানেলটি আপনি যেকোনো ফিল্ড পরিবর্তন করলে রিয়েল টাইমে আপডেট হয়, তাই আপনি এক্সপ্রেশন কপি করার আগেই সমস্যা দেখতে পারেন।

    এটি crontab.guru-এর সাথে কীভাবে তুলনা করে?

    Crontab.guru একটি জনপ্রিয় ক্রন এক্সপ্রেশন এক্সপ্লেইনার কিন্তু এটি শুধু বিদ্যমান এক্সপ্রেশন ডিকোড করে — নতুন তৈরি করার জন্য এর কোনো ভিজ্যুয়াল বিল্ডার নেই এবং Quartz, Spring, AWS EventBridge বা Azure NCRONTAB ফ্লেভার সমর্থন করে না। এই টুলটি উভয়ই তৈরি ও ডিকোড করে, পাঁচটি ফ্লেভারই কভার করে, আপনার স্থানীয় টাইমজোনে পরবর্তী-রান সময় দেখায়, এবং নির্দিষ্ট ফিডব্যাকসহ ফিল্ড-স্তরের ত্রুটি যাচাই করে। এটি সম্পূর্ণভাবে আপনার ব্রাউজারেও চলে, তাই আপনি একটি এক্সপ্রেশন টাইপ বা পেস্ট করার সময় কোনো সার্ভারে অনুরোধ পাঠানো হয় না।

    এই ক্রন জেনারেটর ব্যবহার করতে কি একটি অ্যাকাউন্ট বা সাইনআপ প্রয়োজন?

    না, কোনো অ্যাকাউন্ট নেই, কোনো সাইনআপ নেই, কোনো ইনস্টল নেই এবং কোনো ফাইল আপলোড নেই। বিল্ডার, ডিকোডার, ভ্যালিডেটর এবং পরবর্তী-রান ক্যালকুলেটর সবই সরাসরি আপনার ব্রাউজারে জাভাস্ক্রিপ্টে চলে। আপনার এক্সপ্রেশন আপনার ডিভাইসেই থাকে — কোনো সার্ভারে কিছু পাঠানো হয় না। Cronhub এবং Cronitor-এর মতো টুল একটি শিডিউল যাচাই বা মনিটর করার আগেই আপনাকে একটি অ্যাকাউন্ট তৈরি করতে বলে; এখানে আপনি শুধু পেজ খুলে তৈরি করা শুরু করেন। পেজ লোড হয়ে গেলে টুলটি অফলাইনেও কাজ করে।