প্রকল্প সম্পর্কে

go-schedule হলো Linux, macOS এবং Windows-এর জন্য Go-তে ইমপ্লিমেন্ট করা একটি ক্রস-প্ল্যাটফর্ম টাস্ক শিডিউলার। এটি পুনরাবৃত্তিমূলক শিডিউলগুলোকে সহজবোধ্য করার জন্য ডিজাইন করা হয়েছে: ব্যবহারকারীরা 'every 15 minutes' বা 'weekdays at 09:00'-এর মতো সাধারণ ভাষার এক্সপ্রেশন লিখতে পারেন, অথবা ক্রন-এর একটি ডকুমেন্ট করা সাবসেট ব্যবহার করতে পারেন, যার মধ্যে প্রচলিত পাঁচ-ফিল্ড এবং বাউন্ডেড ছয়-ফিল্ড সেকেন্ড ফর্ম অন্তর্ভুক্ত। গৃহীত শিডিউলগুলো শিডিউলারের ব্যাখ্যা এবং পরবর্তী রান টাইমের সাথে ফেরত পাঠানো হয়, যা ভুলগুলো আগেভাগে ধরতে সাহায্য করে। প্রজেক্টটি তিনটি প্রধান ইন্টারফেস প্রদান করে: একটি CLI (gosched), একটি Wails-ভিত্তিক ডেস্কটপ GUI এবং একটি ব্যাকগ্রাউন্ড ডেমোন (goschedd)। ডেমোনটি শিডিউলিং ইঞ্জিন, SQLite স্টোর এবং এক্সিকিউটরের মালিকানা ধরে রাখে, আর CLI এবং GUI হলো লোকাল IPC এন্ডপয়েন্টের (Linux/macOS-এ Unix domain socket, Windows-এ named pipe) মাধ্যমে পরিচালিত পাতলা ক্লায়েন্ট। এই ডিজাইনের অর্থ হলো GUI বন্ধ করলেও শিডিউলগুলো থামে না এবং CLI ও GUI একই স্টেট-এ কাজ করে। ডেমোনটি systemd, launchd বা Windows Service-এর মাধ্যমে সিস্টেম সার্ভিস হিসেবে রেজিস্টার হতে পারে, যাতে বুট করার সাথে সাথে শিডিউলগুলো শুরু হয় এবং ইন্টারঅ্যাক্টিভ লগইন ছাড়াই চলতে পারে। শিডিউলিং আচরণের মধ্যে রয়েছে IANA টাইমজোন সাপোর্ট, ডে-লাইট সেভিং ট্রানজিশনের স্পষ্ট হ্যান্ডলিং, UTC-ভিত্তিক স্টোরেজ এবং RFC 5545-এর ওপর ভিত্তি করে রিকারেন্স সেমানটিকস। ডাউনটাইমের পর, যে টাস্কগুলো রান মিস করেছে তাদের একটি ক্যাচ-আপ রান দেওয়া হয় এবং তারপর স্বাভাবিকভাবে পুনরায় শুরু হয়। প্রতি-টাস্ক ওভারল্যাপ পলিসি একটি পেন্ডিং রান কিউ করতে পারে (ডিফল্ট), নতুন রান স্কিপ করতে পারে অথবা কনকারেন্ট রান অনুমতি দিতে পারে। ক্যালেন্ডারের এজ কেসগুলো—যেমন ৩১ তারিখ, ২৯ ফেব্রুয়ারি বা পঞ্চম শুক্রবারের জন্য শিডিউল করা টাস্ক—একটি ঘোষিত পলিসি দ্বারা পরিচালিত হয়: পিরিয়ডটি স্কিপ করা, শেষ বৈধ তারিখে ফিরে যাওয়া অথবা পরবর্তী পিরিয়ডে চলে যাওয়া। অতিরিক্ত সক্ষমতার মধ্যে রয়েছে ক্যাসকেডিং এনাবল/ডিজেবল সহ নেস্টেড গ্রুপ, ড্রাফট টাস্ক যা বিস্তারিত জানার আগে সেভ করা যায়, শুধুমাত্র ম্যানুয়াল টাস্ক এবং চেইনিং যেখানে একটি টাস্কের সফল, ব্যর্থ বা যেকোনো টার্মিনাল রেজাল্ট অন্য একটি টার্গেট টাস্ককে ট্রিগার করতে পারে। চেইনগুলোকে টেকসই 'at-least-once delivery' হিসেবে বর্ণনা করা হয়েছে এবং পেন্ডিং কাজগুলো ডেমোন রিস্টার্টের পরেও টিকে থাকে। লোকাল এক্সটার্নাল ট্রিগার এবং ট্রিগার সেটগুলো অন্যান্য প্রসেসকে ওপেক কি (opaque keys) ব্যবহার করে সাধারণ শিডিউলার রান রিকোয়েস্ট করতে দেয়; ট্রিগার সেট প্রতি টাস্কের জন্য ১-৯৯টি স্বতন্ত্রভাবে ব্যবহারযোগ্য কি সাপোর্ট করে। ফাইলসিস্টেম ওয়াচারগুলো কোনো নির্বাচিত ফাইল তৈরি, লেখা বা অ্যাটমিক্যালি রিপ্লেস হয়ে স্থিতিশীল হলে টাস্ক রান রিকোয়েস্ট করতে পারে; ডিরেক্টরি ওয়াচারগুলো বেসনেম গ্লোব ব্যবহার করে এবং ঐচ্ছিকভাবে রিয়েল সাবডিরেক্টরি অন্তর্ভুক্ত করতে পারে। ক্রন ইন্টারঅপারেবিলিটির মধ্যে রয়েছে gosched cron ইমপোর্ট, এক্সপ্লেইন এবং এক্সপোর্ট। ইমপোর্ট একটি বিদ্যমান crontab পড়ে, প্রতিটি লাইন সাধারণ ভাষায় এবং এর পরবর্তী রান টাইম দেখায় এবং টাস্ক তৈরি করে; --dry-run পরিবর্তনের প্রিভিউ দেখায়। অসমর্থিত বা অস্পষ্ট কনস্ট্রাক্টগুলো আনুমানিক করার পরিবর্তে প্রত্যাখ্যান করা হয়। @reboot ফর্ম এবং সহজবোধ্য 'at scheduler startup' ফর্ম একটি ক্রস-প্ল্যাটফর্ম স্টার্টআপ টাস্ক তৈরি করে যা প্রতিবার ডেমোন প্রসেস শুরুর সময় একবার চলে। প্রজেক্টটি Apache-2.0 লাইসেন্সপ্রাপ্ত। রিলিজগুলোর মধ্যে রয়েছে Windows MSI ইনস্টলার, macOS ডেস্কটপ বান্ডেল, Linux ডেস্কটপ বান্ডেল এবং হেডলেস ডেমোন-এবং-CLI আর্কাইভ। ডকুমেন্টেশনে ইনস্টলেশন, CLI রেফারেন্স, GUI ফিল্ডস, ক্রন ইন্টারঅপারেবিলিটি, সিকিউরিটি এবং মেইনটেইনার টেস্ট স্ক্রিপ্ট কভার করা হয়েছে। ডেভেলপমেন্টটি স্পেক-ড্রিভেন এবং specs/001-task-scheduler-এর অধীনে স্পেসিফিকেশন রয়েছে এবং এটি gofmt, go vet, golangci-lint, go test -race এবং কোর প্যাকেজগুলোর কভারেজ টার্গেট সহ Go টুলিং স্ট্যান্ডার্ড ব্যবহার করে।