عن المشروع

go-schedule هو مجدول مهام عابر للمنصات تم تنفيذه بلغة Go لأنظمة Linux وmacOS وWindows. تم تصميمه لجعل الجداول المتكررة مفهومة: حيث يمكن للمستخدمين كتابة تعبيرات بلغة بسيطة مثل 'every 15 minutes' أو 'weekdays at 09:00'، أو استخدام مجموعة فرعية موثقة من cron، بما في ذلك الصيغ التقليدية المكونة من خمسة حقول وصيغ الثواني المكونة من ستة حقول مقيدة. يتم إرجاع الجداول المقبولة مع تفسير المجدول ومواعيد التشغيل التالية، مما يساعد في اكتشاف الأخطاء قبل التنفيذ. يوفر المشروع ثلاث واجهات رئيسية: واجهة سطر أوامر (gosched)، وواجهة رسومية لسطح المكتب تعتمد على Wails، وخلفية برمجية (goschedd). تمتلك الخلفية البرمجية محرك الجدولة، ومخزن SQLite، والمنفذ، بينما تعمل واجهة سطر الأوامر والواجهة الرسومية كعملاء خفيفين عبر نقطة نهاية IPC محلية (Unix domain socket على Linux/macOS، وnamed pipe على Windows). يعني هذا التصميم أن إغلاق الواجهة الرسومية لا يوقف الجداول، وتعمل واجهة سطر الأوامر والواجهة الرسومية على نفس الحالة. يمكن للخلفية البرمجية التسجيل كخدمة نظام من خلال systemd أو launchd أو Windows Service، بحيث تبدأ الجداول عند الإقلاع ويمكنها العمل بدون تسجيل دخول تفاعلي. يتضمن سلوك الجدولة دعم المنطقة الزمنية IANA، والتعامل الصريح مع انتقالات التوقيت الصيفي، والتخزين القائم على UTC، ودلالات التكرار بناءً على RFC 5545. بعد فترة التوقف، تحصل كل مهمة فاتها التشغيل على تشغيل تعويضي واحد ثم تستأنف عملها بشكل طبيعي. يمكن لسياسات التداخل لكل مهمة أن تضع تشغيلاً واحداً معلقاً في قائمة الانتظار (الافتراضي)، أو تتخطى التشغيل الجديد، أو تسمح بالتشغيل المتزامن. يتم التعامل مع الحالات الحدية للتقويم - مثل المهام المجدولة في يوم 31، أو 29 فبراير، أو الجمعة الخامسة - من خلال سياسة معلنة: تخطي الفترة، أو العودة إلى آخر تاريخ صالح، أو الترحيل إلى الفترة التالية. تشمل القدرات الإضافية مجموعات متداخلة مع تفعيل/تعطيل متسلسل، ومهام مسودة يمكن حفظها قبل معرفة كافة التفاصيل، ومهام يدوية فقط، وسلاسل حيث يمكن أن يؤدي اكتمال المهمة بنجاح أو فشل أو أي نتيجة نهائية إلى تشغيل مهمة مستهدفة. توصف السلاسل بأنها تسليم متين لمرة واحدة على الأقل، وتنجو الأعمال المعلقة من إعادة تشغيل الخلفية البرمجية. تسمح المشغلات الخارجية المحلية ومجموعات المشغلات للعمليات الأخرى بطلب تشغيل المجدول العادي باستخدام مفاتيح مبهمة؛ وتدعم مجموعات المشغلات من 1 إلى 99 مفتاحاً يمكن استخدامها بشكل مستقل لكل مهمة. يمكن لمراقبي نظام الملفات طلب تشغيل مهمة عند إنشاء ملف محدد، أو الكتابة فيه، أو استبداله ذرياً ليصبح مستقراً؛ وتستخدم مراقبات المجلدات basename glob ويمكن أن تشمل اختيارياً المجلدات الفرعية الحقيقية. تتضمن إمكانية التشغيل البيني لـ cron عمليات استيراد وتفسير وتصدير عبر gosched. يقرأ الاستيراد crontab الحالي، ويعرض كل سطر بلغة بسيطة وموعد تشغيله التالي، وينشئ المهام؛ وتوفر --dry-run معاينة للتغييرات. يتم رفض البنى غير المدعومة أو الغامضة بدلاً من تقريبها. وتنشئ صيغة @reboot وصيغة 'at scheduler startup' المقروءة مهمة بدء تشغيل عابرة للمنصات تعمل مرة واحدة عند كل بدء لعملية الخلفية البرمجية. المشروع مرخص بموجب Apache-2.0. تشمل الإصدارات مثبت Windows MSI، وحزمة سطح مكتب macOS، وحزمة سطح مكتب Linux، وأرشيفات للخلفية البرمجية وواجهة سطر الأوامر بدون واجهة رسومية. تغطي الوثائق التثبيت، ومرجع واجهة سطر الأوامر، وحقول الواجهة الرسومية، والتشغيل البيني لـ cron، والأمان، ونصوص اختبار المسؤول. التطوير مدفوع بالمواصفات الموجودة تحت specs/001-task-scheduler ويستخدم معايير أدوات Go بما في ذلك gofmt وgo vet وgolangci-lint وgo test -race وأهداف التغطية في الحزم الأساسية.