
ستون حاوية على خادم واحد
صندوق معادن عارية واحد يشغل عشرات إلى مئات حاويات Hoody. يجعل KSM و BTRFS dedup التكلفة الإضافية قريبة من الصفر.
تصدير مقاييس كل ساعة يفشل منذ ثلاثة أيام. أنت في المناوبة الليلة. أرسل PATCH إلى مُدخل cron المُدار بـ enabled:false — يبقى الجدول والأمر والتعليق كما هي. المهمة في حالة محدّدة: حاضرة ومكتومة، تنتظر من يُصلحها.
{ "enabled": false, "comment": "reindex flaking — see thread" }
التبديل ليس سوى PATCH · المُدخل لا يغادر القائمة أبداً
مُدخلات Hoody Cron المُدارة هي مورد JSON: لكل صف معرّف، وجدول، وأمر، وتعليق، وعَلَم enabled. قلب enabled إلى false هو PATCH واحد. يبقى المُدخل في crontab ليقرأه الشخص التالي ويُقرّر ما يفعل.
# mute the flaky entry — entry stays in the crontab curl -X PATCH \ https://cron.containers.hoody.com/users/me/entries/e7d3 \ -H "Content-Type: application/json" \ -d '["enabled": false, "comment": "flaking on monday with prod-db — انظر #pager"]' # response HTTP/1.1 200 OK { "id":"e7d3", "enabled":false, "schedule":"0 * * * *", "command":"/srv/cron/metrics-export.sh", ... }
# the entry is still on the list — just not running curl GET https://cron.containers.hoody.com/users/me/entries HTTP/1.1 200 OK [ { "id":"a1f2", "enabled":true, ... }, { "id":"e7d3", "enabled":false, "comment":"flaking — see #pager" }, { "id":"9b21", "enabled":true, ... } ] # present and muted — the on-call hand-off has somewhere to point
PATCH لا يحذف ولا يُعيد كتابة ولا يُحرّك المُدخل — يقلب قيمة منطقية واحدة. التسليم سطر واحد: 'مُدخل metrics-export رقم e7d3 مكتوم، انظر hoody-cron، ألقِ نظرة من فضلك.'
أيّ مُدخل في crontab على Hoody يكون دائماً في واحدة من ثلاث حالات حصراً. لكل حالة عواقب مختلفة على مَن يعرف ماذا في صباح الغد.
المُدخل في crontab وعفريت cron في النواة يلتقطه كل ساعة. الإخفاقات توقظ المناوب. هذه الحالة الافتراضية للمهام السليمة.
enabled:false. يبقى المُدخل في crontab فيستطيع الفريق قراءة جدوله وأمره وتعليقه. عفريت cron يتخطّاه. لا تنبيه في الثانية صباحاً غداً، ولا أحد ينسى أنه موجود.
حين تُجري DELETE، يغادر الجدول والأمر والتعليق والسبب جميعاً crontab. المناوب التالي ليس لديه ما يبحث فيه بـ grep. الكتم هو الخيار الذي يحفظ الذاكرة.
الكتم هو الحالة الوسطى التي لا تملك معظم المجدوِلات اسماً لها. Hoody Cron يملك واحداً، لأن enabled حقل من الدرجة الأولى في المُدخل المُدار.
حين لا يمكنك إصلاح مهمة الليلة، السؤال هو ما هو شكل غيابها بحلول الغد. الكتم يجعل ذلك الشكل قابلاً للقراءة.
بدلاً من لصق خيط Slack أو PR محذوف السطور، الرسالة هي معرّف المُدخل. مناوب الغد يفتح رابط cron، يقرأ التعليق، ويعرف من أين يبدأ.
GET /entries يُعيد enabled:false إلى جانب التعليق. ابنِ لوحة تدقيق بالتصفية. مَن كتمها، ولماذا، ومنذ متى موجود في JSON، لا في رسائل مباشرة لشخص ما.
حين تُحلّ المشكلة الأساسية، PATCH واحد آخر بـ enabled:true يُعيد المُدخل إلى الجدول. لا إعادة كتابة لتعبير cron، لا خطر أخطاء طباعية، لا دورة إيداع ونشر.
الأرقام تأتي من سطح Hoody Cron للمُدخلات المُدارة، لا من مقاييس مُختلَقة.
PATCH /users/[user]/entries/[id] يقبل جسماً جزئياً. أرسل ["enabled":false] وحدها — الجدول والأمر والتعليق دون مساس.
جدول من خمسة حقول، وأمر، وتعليق، وexpires_at، وid، تستمرّ جميعها عبر الكتم. crontab في النواة لا يزال يعكس المُدخل — مع التعليق عليه فقط من خدمة cron.
لا تعديل ملف، لا PR، لا نشر. دورة الكتم هي استدعاء HTTP واحد من أي تيرمنال، بما في ذلك ذاك الذي على هاتفك.
وفقاً لـ Hoody Cron Managed Entries API: كل مُدخل يحمل قيمة منطقية enabled إلى جانب الجدول والأمر والتعليق وexpires_at الاختياري. PATCH يقبل أجساماً جزئية.
المُعطّل ليس محذوفاً — المُدخل ينتظر من يُصلحه.
الطرق المعتادة التي تُوقف بها الفرق سطر cron متقلّب 'مؤقتاً'. كل واحدة منها إمّا تدميرية، أو فاقدة، أو على بُعد PR-ين من الإنتاج.
توقّف عن حذف المهام المتقلّبة في الثانية صباحاً. اكتمها، اترك ملاحظة، ودع مناوب الغد يقرأ JSON.