منصوبے کے بارے میں

go-schedule ایک کراس پلیٹ فارم ٹاسک شیڈولر ہے جسے Linux، macOS، اور Windows کے لیے Go میں نافذ کیا گیا ہے۔ اسے بار بار ہونے والے شیڈولز کو سمجھنے کے قابل بنانے کے لیے ڈیزائن کیا گیا ہے: صارفین 'every 15 minutes' یا 'weekdays at 09:00' جیسی سادہ زبان کی عبارتیں لکھ سکتے ہیں، یا cron کے ایک دستاویزی سب سیٹ کا استعمال کر سکتے ہیں، جس میں روایتی پانچ فیلڈز اور باؤنڈڈ چھ فیلڈز والے سیکنڈز فارمز شامل ہیں۔ قبول شدہ شیڈولز کو شیڈولر کی تشریح اور اگلی رن ٹائمز کے ساتھ واپس دکھایا جاتا ہے، جس سے چلنے سے پہلے غلط فہمیوں کو پکڑنے میں مدد ملتی ہے۔ یہ پروجیکٹ تین اہم انٹرفیس فراہم کرتا ہے: ایک CLI (gosched)، ایک Wails پر مبنی ڈیسک ٹاپ GUI، اور ایک بیک گراؤنڈ ڈیمن (goschedd)۔ ڈیمن شیڈولنگ انجن، SQLite اسٹور، اور ایگزیکیوٹر کا مالک ہے، جبکہ CLI اور GUI مقامی IPC اینڈ پوائنٹ (Linux/macOS پر Unix domain socket، Windows پر named pipe) کے ذریعے پتلے کلائنٹس کے طور پر کام کرتے ہیں۔ اس ڈیزائن کا مطلب ہے کہ GUI کو بند کرنے سے شیڈولز نہیں رکتے، اور CLI اور GUI ایک ہی حالت (state) پر کام کرتے ہیں۔ ڈیمن systemd، launchd، یا Windows Service کے ذریعے سسٹم سروس کے طور پر رجسٹر ہو سکتا ہے، تاکہ شیڈولز بوٹ پر شروع ہوں اور انٹرایکٹو لاگ ان کے بغیر چل سکیں۔ شیڈولنگ کے رویے میں IANA ٹائم زون سپورٹ، ڈے لائٹ سیونگ ٹرانزیشنز کا واضح انتظام، UTC پر مبنی اسٹوریج، اور RFC 5545 پر مبنی ریکرنس سیمینٹکس شامل ہیں۔ ڈاؤن ٹائم کے بعد، ہر ٹاسک جس کی رن مس ہوئی ہو، اسے ایک کیچ اپ رن ملتا ہے اور پھر وہ معمول کے مطابق دوبارہ شروع ہو جاتا ہے۔ فی ٹاسک اوور لیپ پالیسیز ایک پینڈنگ رن کو کیو کر سکتی ہیں (جو کہ ڈیفالٹ ہے)، نئے رن کو چھوڑ سکتی ہیں، یا ہمہ وقت رنز کی اجازت دے سکتی ہیں۔ کیلنڈر کے خاص کیسز—جیسے 31 تاریخ، 29 فروری، یا پانچویں جمعہ کے لیے شیڈول کیے گئے ٹاسکس—ایک اعلان کردہ پالیسی کے ذریعے سنبھالے جاتے ہیں: اس مدت کو چھوڑ دیں، آخری درست تاریخ پر واپس جائیں، یا اگلی مدت میں منتقل ہو جائیں۔ اضافی صلاحیتوں میں کیسکیڈنگ این ایبل/ڈس ایبل کے ساتھ نیسٹڈ گروپس، ڈرافٹ ٹاسکس جنہیں تمام تفصیلات معلوم ہونے سے پہلے محفوظ کیا جا سکتا ہے، صرف مینول ٹاسکس، اور چیننگ شامل ہے جہاں کامیابی، ناکامی، یا کسی بھی ٹرمینل نتیجے کے ساتھ ٹاسک کی تکمیل ایک ٹارگٹ ٹاسک کو متحرک کر سکتی ہے۔ چینز کو پائیدار at-least-once ڈیلیوری کے طور پر بیان کیا گیا ہے، اور پینڈنگ کام ڈیمن ری اسٹارٹ کے بعد بھی محفوظ رہتا ہے۔ مقامی بیرونی ٹرگرز اور ٹرگر سیٹس دوسرے عملوں کو اوپیک کیز (opaque keys) کا استعمال کرتے ہوئے نارمل شیڈولر رنز کی درخواست کرنے کی اجازت دیتے ہیں؛ ٹرگر سیٹس فی ٹاسک 1 سے 99 آزاد طور پر قابل استعمال کیز کو سپورٹ کرتے ہیں۔ فائل سسٹم واچرز اس وقت ٹاسک رن کی درخواست کر سکتے ہیں جب ایک منتخب فائل بنائی جائے، لکھی جائے، یا ایٹامک طور پر تبدیل ہو کر مستحکم ہو جائے؛ ڈائریکٹری واچرز ایک بیس نیم گلوب (basename glob) استعمال کرتے ہیں اور اختیاری طور پر حقیقی سب ڈائریکٹریز کو شامل کر سکتے ہیں۔ cron انٹرآپریبلٹی میں gosched cron import، explain، اور export شامل ہیں۔ Import ایک موجودہ crontab کو پڑھتا ہے، ہر لائن کو سادہ زبان اور اس کے اگلے رن میں دکھاتا ہے، اور ٹاسکس بناتا ہے؛ --dry-run تبدیلیوں کا پیش نظارہ کرتا ہے۔ غیر معاون یا مبہم ساختوں کو تخمینے کے بجائے مسترد کر دیا جاتا ہے۔ @reboot فارم اور پڑھنے کے قابل 'at scheduler startup' فارم ایک کراس پلیٹ فارم اسٹارٹ اپ ٹاسک بناتے ہیں جو ہر ڈیمن پروسیس اسٹارٹ پر ایک بار چلتا ہے۔ یہ پروجیکٹ Apache-2.0 لائسنس کے تحت ہے۔ ریلیزز میں Windows MSI انسٹالر، macOS ڈیسک ٹاپ بنڈل، Linux ڈیسک ٹاپ بنڈل، اور ہیڈ لیس ڈیمن-اور-CLI آرکائیوز شامل ہیں۔ دستاویزات میں انسٹالیشن، CLI ریفرنس، GUI فیلڈز، cron انٹرآپریبلٹی، سیکیورٹی، اور مینٹینر ٹیسٹ اسکرپٹس شامل ہیں۔ ڈویلپمنٹ spec-driven ہے جس کی تفصیلات specs/001-task-scheduler کے تحت ہیں اور Go ٹولنگ اسٹینڈرڈز بشمول gofmt، go vet، golangci-lint، go test -race، اور کور پیکیجز پر کوریج ٹارگٹس کا استعمال کرتی ہے۔