المستوى: متوسط — للمطورين اللي بيكتبوا cron jobs على سيرفرات Linux ومش متأكدين هي شغّالة فعلاً ولا واقفة بصمت.
سكربت الـ backup اليومي بتاعك ممكن يكون فاشل من 9 أيام وانت ما تعرفش. ما فيش error في Sentry، ما فيش email، ما فيش حاجة. الكارثة بتكتشفها لما العميل يطلب استرجاع داتا الأسبوع اللي فات — وتلاقي آخر نسخة احتياطية عمرها أسبوعين.
Dead Man's Switch: تنبيه عكسي للسكربتات المنسية
في السطور الجاية، هتشوف الفرق بين الـ monitoring التقليدي و Dead Man's Switch، وهتركّب نظام تنبيه شغّال على Cron job في 7 دقايق باستخدام Healthchecks.io، وهتعرف الحالات اللي ما ينفعش تستخدمه فيها.
المشكلة باختصار
الـ monitoring اللي إنت متعوّد عليه — Sentry، Datadog، email alerting — كله بيفترض إن السكربت اشتغل أصلاً وحصلت فيه مشكلة. لكن لو السكربت ما اتشغّلش من البداية، ما فيش حاجة هتنبّهك. الأسباب الشائعة في الإنتاج:
- السيرفر اتعمله reboot وما رجعش الـ cron service بعد التحديث.
- المستخدم اللي شغّاله الـ cronjob اتشال أو الـ login shell بتاعه اتغيّر لـ
/sbin/nologin. - القرص امتلى فالـ log ما اتكتبش أصلاً والسكربت crashed قبل أي خطوة.
- الـ timezone في السيرفر اتغيّر فجأة، الجدول ابتدى يعدّي بدون تنفيذ.
- عدّلت في الـ crontab ونسيت سطر بحرف غلط، فالـ parser رفض الملف كله بصمت.
مثال بسيط: ساعة جدّك بتاعت الحائط
تخيّل ساعة حائط قديمة محتاجة كل 24 ساعة حد يلفّها بمفتاح. لو نسي أي حد يلفّها يوم، هتقف. الطريقة العادية إنك تشوفها كل صباح وتتأكد. لكن لو سافرت أسبوع، الساعة ممكن تقف 6 أيام وما تعرفش غير لما ترجع.
الحل العكسي: حط بجانبها جرس مربوط بسلك معلّق في يدك. كل 24 ساعة لازم تشدّ السلك. أول ما تنسى تشدّه، الجرس بيدق فوراً. ده بالظبط مبدأ Dead Man's Switch — مش بتستنى رسالة "في مشكلة"، إنت بتستنى غياب رسالة "أنا كويس".
التعريف العلمي
Dead Man's Switch هو نمط تصميم لآلية تنبيه عكسية. بدل ما الـ entity تبعت إشارة "في مشكلة" لما تفشل، الـ entity بتبعت إشارة "أنا شغّال" بشكل دوري. لو الإشارة ما وصلتش خلال نافذة زمنية محددة (الـ schedule + grace period)، النظام يفترض إن في خلل ويطلق التنبيه.
المبدأ ده أصله من قطارات السكة الحديد في القرن 19: لو السائق فقد وعيه، يده بتسيب الذراع، فالقطار يفرمل أوتوماتيكياً. Healthchecks.io بيطبّق نفس المبدأ على Cron jobs: كل سكربت عنده رابط ping خاص بـ UUID. السكربت بعد ما يخلّص شغله بنجاح بيعمل HTTP GET للرابط ده. لو الـ ping ما وصلش خلال الـ grace period، Healthchecks بيبعت تنبيه فوري على Telegram أو Slack أو email أو webhook مخصص.
الإعداد العملي في 4 خطوات
- سجّل حساب مجاني على
healthchecks.io. الـ free tier بيدّيك 20 check و SMS مدفوع، كافي لـ small team. - اعمل check جديد. حدد الـ schedule (مثلاً يعني كل يوم الساعة 3 فجر) و grace period (60 دقيقة لسكربت backup كبير معقول).