ক্রন এক্সপ্রেশনের উপাদানসমূহ বিশ্লেষণ
ক্রন (Cron) এক্সপ্রেশন হলো একটি নির্দিষ্ট বিন্যাসের টেক্সট যা ব্যাকগ্রাউন্ডে স্বয়ংক্রিয়ভাবে কোনো কাজ বা টাস্ক চালানোর সময়সূচি নির্ধারণ করে। একটি স্ট্যান্ডার্ড ক্রন এক্সপ্রেশনে মূলত ৫টি ফিল্ড বা অংশ থাকে। এই ক্রন এক্সপ্রেশন পার্সার টুলটি প্রতিটি ফিল্ডকে আলাদা করে বিশ্লেষণ করে এবং এর সহজ অর্থ প্রদর্শন করে।
টুলটিতে ইনপুট হিসেবে একটি সিঙ্গেল-লাইন টেক্সট গ্রহণ করা হয়। স্ট্যান্ডার্ড ৫-ফিল্ড ক্রন এক্সপ্রেশনের প্রতিটি ফিল্ডের বিন্যাস নিচে দেওয়া হলো:
- মিনিট: ঘণ্টা শুরুর পর কততম মিনিটে কাজটি রান করবে তা নির্ধারণ করে।
- ঘণ্টা (Hour): দিনের কোন কোন ঘণ্টায় কাজটি রান করবে তা নির্ধারণ করে।
- মাসের দিন: মাসের নির্দিষ্ট কোন কোন তারিখে কাজটি রান করবে তা নির্ধারণ করে।
- মাস: বছরের কোন কোন মাসে কাজটি রান করবে তা নির্ধারণ করে।
- সপ্তাহের দিন: সপ্তাহের কোন কোন দিনে কাজটি রান করবে তা নির্ধারণ করে।
এই টুলটি স্ট্যান্ডার্ড ৫-ফিল্ড সিনট্যাক্স সমর্থন করে। তবে এটি কোনো ষষ্ঠ "seconds" ফিল্ড বা Quartz-নির্দিষ্ট এক্সটেনশন যেমন L, W, অথবা # সমর্থন করে না।
সমর্থিত ফরম্যাট এবং শর্টকাট
টুলটি বিভিন্ন ধরনের জটিল ক্রন ফরম্যাট পার্স করতে সক্ষম। নিচে সমর্থিত ফরম্যাটগুলোর বিবরণ দেওয়া হলো:
- রেঞ্জ (Ranges): যেমন
1-5, যা একটি নির্দিষ্ট সীমার মধ্যে কাজ করার নির্দেশ দেয়। - স্টেপস (Steps): যেমন
*/15, যা নির্দিষ্ট ব্যবধানে কাজ করার নির্দেশ দেয়। - লিস্ট (Lists): যেমন
1,15, যা একাধিক নির্দিষ্ট মানকে নির্দেশ করে। - নামসহ মাস ও সপ্তাহের দিন: যেমন মাসের জন্য
JANএবং সপ্তাহের দিনের জন্যMON। - শর্টকাট: স্ট্যান্ডার্ড ৫-ফিল্ড ছাড়াও টুলটি কিছু সাধারণ শর্টকাট সমর্থন করে, যেমন:
@yearly,@monthly,@weekly,@daily, এবং@hourly।
ইনপুটের একটি উদাহরণ হলো: */15 9-17 * * MON-FRI।
ক্রন শিডিউলিংয়ের বিশেষ নিয়ম ও জটিলতা
ক্রন এক্সপ্রেশন লেখার সময় কিছু নির্দিষ্ট নিয়ম এবং লজিক্যাল আচরণ মাথায় রাখা প্রয়োজন।
মাসের দিন এবং সপ্তাহের দিনের পারস্পরিক সম্পর্ক
যখন ক্রন এক্সপ্রেশনে "মাসের দিন" (day-of-month) এবং "সপ্তাহের দিন" (day-of-week) উভয় ফিল্ডই নির্দিষ্ট বা সীমাবদ্ধ করা থাকে (অর্থাৎ কোনোটিই ওয়াইল্ডকার্ড * থাকে না), তখন শিডিউলারের নিয়ম অনুযায়ী যেকোনো একটি শর্ত মিললেই কাজটি রান করবে। অর্থাৎ, নির্ধারিত মাসের দিন অথবা নির্ধারিত সপ্তাহের দিন—যেকোনো একটির সাথে মিললেই শিডিউলটি কার্যকর হয়।
অসম্ভব শিডিউল বা ত্রুটিপূর্ণ লজিক
কিছু ক্ষেত্রে ক্রন এক্সপ্রেশনটি ব্যাকরণগতভাবে সঠিক হলেও লজিক্যালি এমন একটি শিডিউল তৈরি করে যা বাস্তবে কখনো ঘটা সম্ভব নয়। উদাহরণস্বরূপ, যদি মাসের দিন হিসেবে ৩১ তারিখ নির্ধারণ করা হয় এবং মাস ফিল্ডে এপ্রিল, জুন, সেপ্টেম্বর বা নভেম্বরের মতো মাসগুলো অন্তর্ভুক্ত থাকে, তবে সেই মাসগুলোতে ৩১ তারিখ না থাকায় শিডিউলটি অকার্যকর হয়ে পড়ে। এই ধরনের ক্ষেত্রে টুলটি একটি নির্দিষ্ট ত্রুটি বার্তা প্রদর্শন করে।
টুলের আউটপুট এবং বিশ্লেষণ পদ্ধতি
টুলটিতে কোনো ক্রন এক্সপ্রেশন ইনপুট দিলে তা ভেঙে নিচের অংশগুলোতে বিশ্লেষণ করা হয়:
- শিডিউল বিশ্লেষণ:
- মিনিট: মিনিট ফিল্ডের পার্স করা মান।
- ঘণ্টা: ঘণ্টা ফিল্ডের পার্স করা মান।
- মাসের দিন: মাসের দিন ফিল্ডের পার্স করা মান।
- মাস: মাস ফিল্ডের পার্স করা মান।
- সপ্তাহের দিন: সপ্তাহের দিন ফিল্ডের পার্স করা মান।
যদি কোনো ফিল্ডে ওয়াইল্ডকার্ড * থাকে, তবে আউটপুটে তা "যেকোনো" হিসেবে প্রদর্শিত হয়। আবার */n ফরম্যাটের ক্ষেত্রে আউটপুটটি ফিল্ড অনুযায়ী নিম্নরূপ দেখায়:
- "প্রতি
{n}মিনিট পর পর" - "প্রতি
{n}ঘণ্টা পর পর" - "প্রতি
{n}দিন পর পর" - "প্রতি
{n}মাস পর পর" - "প্রতি
{n}দিন পর পর"
এছাড়াও, ব্যবহারকারী "সংখ্যা" ইনপুটটি ১ থেকে ২০ পর্যন্ত পরিবর্তন করে পরবর্তী কতটি রান টাইম দেখতে চান তা নির্ধারণ করতে পারেন। আউটপুটে "পরবর্তী রানসমূহ" তালিকার সাথে "(আপনার স্থানীয় সময়)" এবং "প্রদর্শিত রান" সংখ্যাটি দেখানো হয়।
ইন্টারফেসের স্থিতি এবং ত্রুটিসমূহ
টুলটি ব্যবহারের সময় ইনপুটের অবস্থার ওপর ভিত্তি করে নিচের স্থিতি বা ত্রুটি বার্তাগুলো দেখা যেতে পারে:
- খালি ইনপুট: ইনপুট ফিল্ডটি খালি থাকলে টুলটি প্রাথমিক অবস্থায় ফিরে যায় এবং দেখায় "পার্স করতে একটি ক্রন এক্সপ্রেশন লিখুন।" (ready)।
- ভুল সিনট্যাক্স: ক্রন এক্সপ্রেশনটি ব্যাকরণগতভাবে ভুল হলে দেখায় "অবৈধ ক্রন এক্সপ্রেশন।" (invalid)।
- অসম্ভব শিডিউল: এক্সপ্রেশনটি বৈধ কিন্তু শিডিউলটি কখনো ঘটা সম্ভব না হলে দেখায় "এই শিডিউলটি কখনই ঘটতে পারে না — এমন কোনো মাসের দিন আছে কি না পরীক্ষা করুন যা প্রতিটি নির্বাচিত মাসে থাকে না।"।
ডেটা প্রসেসিং এবং গোপনীয়তা
এই ক্রন এক্সপ্রেশন পার্সার টুলটি সম্পূর্ণভাবে ক্লায়েন্ট-সাইড প্রযুক্তিতে কাজ করে। আপনার ইনপুট করা ক্রন এক্সপ্রেশনটি আপনার নিজস্ব ব্রাউজারেই পার্স করা হয়। BroBroGo-তে কোনো ডেটা বা এক্সপ্রেশন পাঠানো হয় না।
প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
প্রশ্ন: এই টুলটি কোন ক্রন সিনট্যাক্স সমর্থন করে?
উত্তর: স্ট্যান্ডার্ড ৫-ফিল্ড ক্রন — মিনিট, ঘণ্টা, মাসের দিন, মাস এবং সপ্তাহের দিন — যার মধ্যে রেঞ্জ (1-5), স্টেপস (*/15), লিস্ট (1,15), নামসহ মাস ও সপ্তাহের দিন (JAN, MON) এবং @yearly/@monthly/@weekly/@daily/@hourly শর্টকাট অন্তর্ভুক্ত। একটি সহজে ভুল হওয়া নিয়ম: যখন মাসের দিন এবং সপ্তাহের দিন উভয়ই সীমাবদ্ধ থাকে (অর্থাৎ * নয়), তখন যেকোনো একটির সাথে মিললেই চলে — দুটিরই মিলতে হবে এমন নয়।
প্রশ্ন: পরবর্তী রান টাইমগুলো কোন টাইমজোনে দেখানো হচ্ছে?
উত্তর: আপনার ব্রাউজারের স্থানীয় টাইমজোন — যা আপনার সিস্টেমের ঘড়ি ব্যবহার করে। স্ট্যান্ডার্ড ক্রনের নিজস্ব কোনো টাইমজোন থাকে না; এটি যে জব শিডিউলার চালায় সে এটি নির্ধারণ করে। তাই এই সময়গুলোকে আপনার নিজস্ব স্থানীয় শিডিউলের প্রিভিউ হিসেবে বিবেচনা করুন, সার্ভারের সময় হিসেবে নয়।
প্রশ্ন: কেন দেখাচ্ছে যে এই শিডিউলটি কখনই ঘটতে পারে না?
উত্তর: সাধারণত এমন একটি মাসের দিন যা প্রতিটি নির্বাচিত মাসে থাকে না — যেমন, মাস ফিল্ডে এপ্রিল, জুন, সেপ্টেম্বর বা নভেম্বরের সাথে ৩১ তারিখ থাকা। এমন একটি দিন বেছে নিন যা আপনার তালিকাভুক্ত সব মাসেই থাকে, অথবা শিডিউলটিকে আলাদা এক্সপ্রেশনে ভাগ করুন।