هذا المقال يتطلّب مستوى: مبتدئ
أخطر عطل في السيرفر مش اللي بيديك خطأ أحمر. أخطره اللي بيسكت. مهمة cron ممكن تقف من أسبوعين وانت فاكر النسخ الاحتياطي بيتاخد كل ليلة. المفتاح الميّت هو اللي بيكشف السكوت ده قبل ما يتحوّل لكارثة، وهتعمله في أقل من 10 دقايق.
المشكلة باختصار
المراقبة العادية بتشتغل بمنطق "بلّغني لو حصل خطأ". المشكلة إن مهمة cron لمّا تقف تمامًا، مفيش خطأ بيتبعت أصلًا. السيرفر اتعمله reboot، أو المسار اتغيّر، أو الـ cron نفسه اتوقف. النتيجة: صمت كامل، وانت بتفسّر الصمت غلط على إنه "كله تمام".
السيناريو الواقعي: عندك سكربت بياخد نسخة احتياطية لقاعدة بياناتك كل ليلة الساعة 2. السكربت وقف يوم 3 من الشهر بسبب القرص امتلأ. مفيش حد اتبلّغ. يوم 17 القرص بايظ، وآخر نسخة سليمة عمرها 14 يوم. خسرت أسبوعين شغل عشان كنت بتراقب النجاح، مش الغياب.
المفهوم بمثال بسيط الأول
تخيّل عندك بوّاب في مصنع، شغلته يتّصل بيك كل ساعة يطمنك إن كل حاجة تمام. طول ما بيتّصل، انت مرتاح. الساعة اللي ميتّصلش فيها، انت فورًا بتقلق: يمكن نام، يمكن حصله حاجة. لاحظ الخدعة الذكية هنا: انت مش مستني مكالمة تقولك "في مشكلة". انت بتراقب غياب مكالمة "أنا تمام". السكوت نفسه هو الإنذار.
ده بالظبط المفتاح الميّت. مهمة cron بتلعب دور البوّاب: كل ما تخلّص شغلها بنجاح، تبعت "نبضة" لخدمة خارجية تقول "أنا اشتغلت". الخدمة الخارجية بتعرف إنها المفروض تسمع نبضة كل يوم مثلًا. أول ما تعدّي المدة من غير نبضة، هي اللي بتصحّى وتبعتلك تنبيه.
علميًا: المفتاح الميّت (Dead Man's Switch) آلية بتطلق إجراء تلقائي عند توقّف إشارة دورية متوقّعة، مش عند وصول إشارة خطأ. أصل الاسم من مقابض القطارات اللي بتوقف القطار لو السائق ساب المقبض (فقد الوعي). في المراقبة بنسميها كمان "heartbeat monitoring": المهمة بتنبض، وغياب النبضة هو الحدث.
الحل العملي في 3 خطوات
هنستخدم healthchecks.io — خدمة مجانية للاستخدام البسيط (حتى 20 فحص مجانًا)، ومفتوحة المصدر لو حابب تشغّلها على سيرفرك. الفكرة إنها بتديك رابط فريد، ومهمتك بس تعمله ping بعد ما تنجح.
- اعمل حساب على healthchecks.io وأنشئ فحص جديد، وحدّد الجدول المتوقّع (مثلًا: كل يوم مرة، مع مهلة سماح ساعة).
- هياخد لك رابط زي
https://hc-ping.com/your-uuid. - عدّل مهمة الـ cron بحيث تعمل ping للرابط ده بعد نجاح السكربت فقط.
الطريقة الأساسية: ping بعد النجاح
# /etc/crontab أو crontab -e
# النسخة الاحتياطية كل ليلة الساعة 2، وبعد النجاح فقط نبعت نبضة
0 2 * * * /opt/scripts/backup.sh && curl -fsS -m 10 --retry 3 https://hc-ping.com/your-uuidالسطر ده بيقول: شغّل backup.sh، ولو رجع نجاح (&&) بس، ابعت نبضة. لو السكربت فشل أو مااشتغلش خالص، النبضة مش هتتبعت، وhealthchecks.io هيبعتلك إيميل أو تنبيه Slack بعد المهلة. خيارات curl: -f يفشل عند خطأ HTTP، -m 10 مهلة 10 ثواني، --retry 3 يعيد المحاولة لو الشبكة زنقت.
الطريقة الأدق: بلّغ بالبداية والنهاية والفشل
#!/usr/bin/env bash
URL="https://hc-ping.com/your-uuid"
# نبضة بداية: نعرف إن السكربت بدأ فعلاً
curl -fsS -m 10 "$URL/start" > /dev/null
# نشغّل الشغل الحقيقي ونمسك كود الخروج
/opt/scripts/backup.sh
EXIT=$?
# لو فشل نبعت نبضة فشل بكود الخروج، لو نجح نبعت نبضة نجاح
if [ $EXIT -ne 0 ]; then
curl -fsS -m 10 "$URL/fail" > /dev/null
else
curl -fsS -m 10 "$URL" > /dev/null
fiكده بتفرّق بين ثلاث حالات: المهمة بدأت، نجحت، أو فشلت. لو عدّت المهلة من غير أي نبضة، تبقى المهمة ماشتغلتش أصلًا. الفرق ده بيوفّر عليك وقت تشخيص كبير وقت الأعطال.
الأرقام والمقايضات
الأرقام اللي تهمك: النبضة الواحدة أقل من 1 كيلوبايت وبتاخد أجزاء من الثانية، يعني حمل صفر تقريبًا على سيرفرك. الخطة المجانية بتغطي 20 فحص، وده يكفي لعشرات المهام في مشروع صغير أو متوسط. وقت الكشف = مدة الجدول + مهلة السماح؛ لو ضبطتها يوم + ساعة، أسوأ حالة تعرف خلال ~25 ساعة بدل ما تكتشف بالصدفة بعد أسابيع.
الـ trade-off هنا واضح: بتكسب اكتشاف الأعطال الصامتة، بتخسر إنك بقيت معتمد على خدمة خارجية. لو healthchecks.io وقعت، ممكن تجيلك تنبيهات كاذبة. الحل لو ده يقلقك: شغّل النسخة مفتوحة المصدر على سيرفر منفصل عن اللي بتراقبه — قاعدة مهمة: أداة المراقبة لازم تعيش بعيد عن الحاجة اللي بتراقبها، وإلا هتموت الاتنين مع بعض في صمت.
متى لا تستخدم هذه الطريقة
المفتاح الميّت مصمّم للمهام الدورية المنتظمة. متستخدموش للمهام اللي بتشتغل على فترات غير متوقّعة (زي job بيتشغّل عند رفع ملف من مستخدم) — مفيش جدول ثابت يقيس عليه الغياب. كمان لو محتاج تعرف تفاصيل ليه فشل، ده مش بديل عن جمع اللوجات؛ هو بيقولك "في مشكلة" مش "المشكلة إيه". وللمهام الحسّاسة جدًا (نظام دفع مثلًا)، اعتبره طبقة إنذار إضافية فوق مراقبة أعمق، مش الطبقة الوحيدة.
الخطوة التالية
افتح أهم مهمة cron عندك دلوقتي — غالبًا النسخ الاحتياطي. أنشئ فحص واحد على healthchecks.io، وضيف && curl -fsS -m 10 https://hc-ping.com/your-uuid في آخر السطر. استنى دورة واحدة وتأكد إنها بقت خضراء. بعدين اكسرها عمدًا (غيّر اسم السكربت غلط) وشوف التنبيه بيوصلك خلال المهلة. لو التنبيه وصل، يبقى شبكة الأمان بتاعتك شغّالة فعلًا.
المصادر
- Healthchecks.io — التوثيق الرسمي وطريقة الـ ping:
https://healthchecks.io/docs/ - المشروع مفتوح المصدر للتشغيل الذاتي:
https://github.com/healthchecks/healthchecks - توثيق curl لخيارات
--retryو-m:https://curl.se/docs/manpage.html - مفهوم Dead Man's Switch (نظرة عامة):
https://en.wikipedia.org/wiki/Dead_man%27s_switch