টুল
গাইড

Cron এক্সপ্রেশন নির্মাতা

রূপান্তর

cron এক্সপ্রেশন তৈরি, যাচাই ও ব্যাখ্যা করে। পরবর্তী ট্রিগার সময় (UTC) গণনা করে।

100% ক্লায়েন্ট-সাইড কোনো ব্যাকএন্ড নেই
প্রিসেট
আউটপুট
পরবর্তী চালানো (UTC)
—
কপি
—
এই পৃষ্ঠায়

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

একটি cron এক্সপ্রেশন হলো পাঁচটি স্পেস-বিভাজিত ফিল্ড দিয়ে লেখা একটি কমপ্যাক্ট সূচি: minute hour day-of-month month day-of-week। 0 9 * * 1-5-এর মতো একটি লাইন বাম থেকে ডানে পড়া যায় “minute 0, hour 9, প্রতিটি day-of-month, প্রতিটি month, দিন ১ থেকে ৫ (সোম–শুক্র)” — অর্থাৎ কর্মদিবসে ০৯:০০। প্রতিটি * মানে “এই ফিল্ডের প্রতিটি মান”, তাই আপনি যত বেশি ফিল্ড নির্দিষ্ট করবেন, সূচিটি তত বেশি সুনির্দিষ্ট হবে; যত বেশি * রেখে যাবেন, এটি তত বেশি বার ট্রিগার হবে।

cron হলো Linux crontab, GitHub Actions, Kubernetes CronJob, বেশিরভাগ CI সিস্টেম এবং অসংখ্য টাস্ক শিডিউলারের স্থানীয় শিডিউলিং ভাষা। একটি সঠিকভাবে লেখা অর্ধেক লড়াই; বাকি অর্ধেক হলো day-of-month / day-of-week কুইর্ক (নিচের প্রশ্নোত্তর দেখুন) যা অভিজ্ঞ ইঞ্জিনিয়াদেরও হোঁচট খাওয়ায়। এই পৃষ্ঠাটি আপনার পাঁচটি ফিল্ড টাইপ করার সাথে সাথে পার্স করে, সিনট্যাক্স বা সীমা ত্রুটিযুক্ত নির্দিষ্ট ফিল্ডটি চিহ্নিত করে, এবং পরবর্তী চালানো গণনা করে যাতে আপনি নিশ্চিত করতে পারেন সূচিটি আসলে আপনার মনে হওয়া সময়েই ট্রিগার হয়।

কীভাবে ব্যবহার করবেন#

  1. উপরের এক্সপ্রেশন বক্সটি সম্পাদনা করুন। এটি * * * * * (প্রতি মিনিট) দিয়ে শুরু হয়।
  2. এর নিচে পাঁচটি ড্রপডাউন রয়েছে — প্রতিটি ফিল্ডের জন্য একটি (minute, hour, day-of-month, month, day-of-week)। প্রতিটি সেই ফিল্ডের সাধারণ খণ্ডগুলো সরবরাহ করে (*, */5, 0, 1-5, 0,6…); একটি বাছলে তা এক্সপ্রেশনের সংশ্লিষ্ট স্থানে বসে যায়, যা তখন কাজে দেয় যখন আপনি মনে করতে পারেন না */15 মিনিটের স্লটে পড়ে কি না।
  3. প্রিসেট সারিটি এক ক্লিকে সম্পূর্ণ স্টার্টার সূচি পূরণ করে: প্রতি মিনিট, প্রতি ঘণ্টা, প্রতিদিন, সাপ্তাহিক, মাসিক, বার্ষিক, কর্মদিবস।
  4. আউটপুট প্যানেল পরবর্তী চালানো (বর্তমান সময়ে বা তার পরে মিলে যাওয়া প্রথম মুহূর্ত) এবং একটি স্ট্যাটাস লাইন দেখায় যা হয় একটি বৈধ পার্স নিশ্চিত করে অথবা ত্রুটিপূর্ণ ফিল্ডটির নাম দেয়। বর্তমান মুহূর্তের বিপরীতে পুনরায় গণনা করতে now() চাপুন।

প্রধান বৈশিষ্ট্য#

  • সম্পূর্ণ পাঁচ-ফিল্ড ব্যাকরণ। *, কমা তালিকা (0,15,30,45), সীমা (1-5), ধাপ (*/15, 9-17/2), এবং month/day নাম (JAN-DEC, SUN-SAT, কেস-সংবেদনশীল নয়) সমর্থন করে। রবিবারের জন্য 7 গৃহীত হয় এবং 0-এ নরমালাইজ করা হয়।
  • সঠিক day-of-month/day-of-week যুক্তি। প্রমিল Vixie-cron নিয়ম বাস্তবায়িত: যখন উভয় ফিল্ড সীমাবদ্ধ থাকে, কাজটি ট্রিগার হয় যদি যেকোনো একটি মেলে (লজিক্যাল OR); যখন কেবল একটি সীমাবদ্ধ থাকে, উভয়কেই মেলাতে হবে (AND)। অনেক সরল ক্যালকুলেটর এটি ভুল করে।
  • ফিল্ড-নির্দিষ্ট ত্রুটি। একটি খারাপ সীমা বা একটি অতিরিক্ত অক্ষরকে ত্রুটিস্থল হিসেবে নির্দিষ্ট ফিল্ডসহ রিপোর্ট করা হয় (minute, hour…), জেনেরিক “invalid expression” নয়।
  • UTC-ভিত্তিক পরবর্তী-চালানো। পরবর্তী ট্রিগারটি মুহূর্তের UTC উপাদানে গণনা করা হয়, তাই ফলাফলটি পৃষ্ঠাটি কোথায় লোড করা হয়েছে তার উপর নির্ভর না করেই নির্ধারিত, তারপর এটি একটি সাধারণ তারিখ হিসেবে রেন্ডার করা হয় যা আপনি কপি করতে পারেন।
  • পৌঁছানোর অসম্ভবতা সুরক্ষা। এমন একটি এক্সপ্রেশন যা কখনো মেলে না (যেমন এমন একটি day-of-month যা কোনো মাসেই নেই) চিরকাল লুপ না করে শনাক্ত করা হয়।

ব্যবহারের উদাহরণ#

কর্মদিবসের স্ট্যান্ডআপের জন্য 0 9 * * 1-5 টাইপ করুন। ফিল্ড অনুযায়ী: minute 0, hour 9, day-of-month *, month *, day-of-week 1-5। তারিখ ফিল্ড (*) এবং উইকডে ফিল্ড (1-5) উভয়ই সীমাবদ্ধ, কিন্তু কেবল উইকডে — তারিখ একটি ওয়াইল্ডকার্ড — তাই AND পথ প্রযোজ্য: সোম থেকে শুক্র দিনগুলোতে ০৯:০০-এ ট্রিগার করুন। পরবর্তী চালানো আসন্ন কর্মদিবসের ০৯:০০ UTC মুহূর্ত দেখায়।

এখন 0 0 1 * 1-এর সাথে তুলনা করুন — “minute 0, hour 0, মাসের ১ম দিন, প্রতি মাসে, সোমবার”। এখানে day-of-month (1) এবং day-of-week (1) উভয়ই সীমাবদ্ধ, তাই cron OR পথ নেয়: কাজটি প্রতি মাসের ১ম দিনে এবং প্রতিটি সোমবারে ট্রিগার হয় — “যেসব সোমবার ১ম তারিখে পড়ে” নয়, যা প্রায়-সর্বজনীন ভুল পড়া। পরবর্তী চালানো প্যানেল পার্থক্যটি দৃশ্যমান করে: আপনি দেখবেন এটি নিকটতম সোমবারে এড়িয়ে যায় এশি যখন সেই সোমবারটি ১ম তারিখ নয়।

প্রশ্নোত্তর#

আমার কাজটি এমন দিনে কেন ট্রিগার হয় যা আমি আশা করিনি?#

প্রায় সবসময়ই day-of-month/day-of-week মিথস্ক্রিয়া। প্রমিল cron উভয় পিন করা থাকলে সেগুলোকে OR হিসেবে বিবেচনা করে: 0 0 1 * 1 মানে “১ম দিন, অথবা যেকোনো সোমবার”, “যদি ১ম তারিখটি সোমবার হয় তবে কেবল ১ম” নয়। আপনি যদি এমন একটি কাজ চান যা কেবল তখনই চলে যখন ১ম তারিখটি সোমবার, cron নিজে তা প্রকাশ করতে পারে না — আপনি ১ম তারিখ শিডিউল করুন এবং স্ক্রিপ্টের ভেতরে একটি উইকডে চেক যোগ করুন।

*/5 এবং 9-17/2 কী বোঝায়?#

মিনিট ফিল্ডে */5 মানে “0 থেকে শুরু, প্রতি ৫ম মান” → 0, 5, 10, 15, …, 55। 9-17/2 মানে “9 থেকে 17 সীমার মধ্যে, প্রতি ২য় মান” → 9, 11, 13, 15, 17 — “কর্মসময়ে প্রতি দুই ঘণ্টা” করার জন্য কার্যকর। /-এর পরের ধাপ ভাজক তার আগের যেকোনো সীমা বা ওয়াইল্ডকার্ডে প্রযোজ্য।

রবিবার 0 নাকি 7?#

উভয়ই। day-of-week ফিল্ড রবিবারের জন্য 0 এবং 7 গ্রহণ করে (cron ঐতিহাসিকভাবে 0 ব্যবহার করত; কিছু সিস্টেম 7 যোগ করেছে)। এই টুল যেকোনো একটি নেয় এবং 7-কে 0-এ নরমালাইজ করে। নামও কাজ করে: SUN, Mon, fri সবগুলোই কেস-সংবেদনশীল নয়।

এক্সপ্রেশনটি পার্স হয়েছে কিন্তু পরবর্তী চালানো অনেক দূরে দেখাচ্ছে। এটি কি ভুল?#

সম্ভবত নয় — এটি সাধারণত বোঝায় সূচিটি সত্যিই শীঘ্র ট্রিগার করতে পারে না। 0 0 29 2 * (ফেব্রুয়ারি ২৯) বৈধ কিন্তু কেবল অধিবর্ষে মেলে, তাই পরবর্তী চালানো বছর দূরে হতে পারে। টুল তার অনুসন্ধান প্রায় আট বছরে সীমাবদ্ধ রাখে; সেই উইন্ডোর ভেতরে মেলে না এমন একটি এক্সপ্রেশন পৃষ্ঠাটিকে ঝুলিয়ে না রেখে পৌঁছানোর অসম্ভব হিসেবে রিপোর্ট করা হয়।