مهمة مجدولة عملت دون VPN وتبدو سليمة
تقول الحالة إن العملية ناجحة والبيانات مفقودة. اشترط في كل تشغيل الاتصال الدقيق وسجّل التخطيات على حدة بدلًا من الوثوق بالجدول.
تقول حالة المهمة إن العملية ناجحة، ويُظهر السجل تشغيلًا مكتملًا، بينما البيانات قديمة أو غائبة. هذه التركيبة تعني عادةً أن المهمة المجدولة بدأت دون المسار الذي احتاجته، وأن شيئًا في المصب ابتلع الفشل. الجدول الذي ينطلق في الوقت المحدد لا يقول شيئًا عن جاهزية الشبكة. الفجوة بين هاتين الحقيقتين هي مكان هذا الفشل.
القبول يعود إلى التشغيل، لا إلى وجود ملف cron.
التشغيل الأخضر ليس مهمة مكتملة
يلاحظ المجدول أن عملية بدأت ثم خرجت؛ وليس لديه فكرة عما إذا وصلت تلك العملية إلى المورد الذي وُجدت من أجله. السكربت الذي يعامل اتصالًا فاشلًا كنتيجة فارغة، أو يلتقط خطأً ويخرج بالصفر، سيبدو سليمًا إلى الأبد. العَرَض ليس حالة حمراء؛ بل حالة معقولة ملتصقة بعمل مفقود.
سمِّ ما يحتاجه التشغيل فعليًا قبل أن تقرر كيف تتحقق منه. قد تحتاج نسخة احتياطية إلى DNS خاص ونقطة نهاية موثقة، وليس مجرد عملية نفق.
تحقق من الاتصال، لا من اسم الواجهة
يمكن أن توجد واجهة باسم tun0 دون الجلسة المهمة، وقد تملك اتصالات أخرى ذلك الاسم. تحقق من الكائن المحدد الذي تعتمد عليه المهمة: هوية ملف تعريف واحدة، أو نسخة خدمة واحدة، أو عملية صغيرة معتمدة ضد المورد. أبقِ التحقق محدودًا زمنيًا، وأبقِ بيانات الاعتماد خارج وسائط العملية وسجلات التشخيص.
حدِّد نتيجة الانقطاع أيضًا. التخطي العادي، وإعادة المحاولة داخل نافذة قصيرة، والموعد النهائي المفقود الظاهر للمشغّل ثلاث إجابات مختلفة، والجدول المتكرر لا يختار بينها.
التخطيات والإخفاقات نتيجتان مختلفتان
[Service] Type=oneshot User=worker ExecCondition=/usr/local/libexec/check-office-path ExecStart=/usr/local/bin/private-task
في نشر systemd، يشغّل ExecCondition= ذلك الفاحص قبل عبء العمل. سلوك خروجه محدد: الصفر يواصل، والرموز من واحد إلى 254 تتخطى أوامر البدء المتبقية دون وسم الوحدة بالفشل، و255 أو الإنهاء غير الطبيعي يفشلها. يمنح ذلك ثلاث إشارات مميزة، لا تكون مفيدة إلا إذا عُيِّن عقد الفاحص عليها عن قصد. الإعدادات التي تعيد تعريف النجاح يمكن أن تغير الصورة، لذا وثّق التعيين.
تسجيل التخطيات هو ما يجعل التصميم صادقًا. التشغيل المتخطى الذي لا يظهر في أي مكان لا يمكن تمييزه عن تشغيل نجح، ومعاملة كل خطأ فاحص كتخطٍّ هادئ تخفي نشرًا معطلًا إلى أجل غير مسمى.
احمِ التشغيل كله، لا البداية فقط
فحص الجاهزية يراقب العالم قبل الإطلاق؛ وهو لا يضبط كل مقبس بعده. عندما يكون المسار المباشر غير مقبول أبدًا لهذه المهمة، أرفق سياسة خروج معتمدة تُنفَّذ باستمرار، تغطي DNS وIPv6 والنقل الخاص بالنفق. تبديل حالة IPv6 العامة للمضيف ليس بديلًا عن سياسة محدودة النطاق على المهمة.
قرر ما إذا كان حدث جديد قد يتداخل مع مهمة لا تزال تعمل، واحتفظ بتلك القاعدة لدى مالك عبء العمل، واجعل إعادة المحاولة آمنة لعملية البيانات. إيقاف مهمة عند الانقطاع يحدّ من العمل دون ضمان أي شيء بشأن حركة الاحتياط.
اقبل سير العمل على ثلاث حالات: مسار جاهز، ومسار غير متاح، وفقدان أثناء التشغيل. أي شيء أقل يختبر الجدول، لا المهمة.