משימה מתוזמנת שרצה בלי ה-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 או סיום חריג מכשילים אותה. זה נותן שלושה אותות נפרדים, שמועילים רק אם חוזה הבודק ממופה אליהם בכוונה. הגדרות שמגדירות מחדש הצלחה יכולות לשנות את התמונה, לכן תעדו את המיפוי.
תיעוד דילוגים הוא מה שהופך את התכנון לישר. הרצה שדולגה ואינה מופיעה בשום מקום אינה ניתנת להבחנה מהרצה שהצליחה, והתייחסות לכל שגיאת בודק כדילוג שקט מסתירה פריסה שבורה ללא הגבלת זמן.
הגנו על כל ההרצה, לא רק על ההתחלה
בדיקת מוכנות צופה בעולם לפני ההשקה; היא אינה מפקחת על כל socket לאחר מכן. כאשר נתיב ישיר אינו מקובל לעולם עבור המשימה הזו, צרפו מדיניות יציאה מאושרת שנאכפת ברציפות ומכסה DNS, IPv6 ואת התעבורה של המנהרה עצמה. החלפת מצב ה-IPv6 הגלובלי של המארח אינה תחליף למדיניות מוגבלת על המשימה.
החליטו אם אירוע חדש רשאי לחפוף למשימה שעדיין רצה, החזיקו את הכלל הזה אצל בעל עומס העבודה, והפכו ניסיון חוזר לבטוח עבור פעולת הנתונים. עצירת משימה בעת ניתוק מגבילה עבודה בלי להבטיח דבר לגבי תעבורת גיבוי.
קבלו את זרימת העבודה בשלושה מקרים: נתיב מוכן, נתיב לא זמין ואובדן באמצע ההרצה. כל דבר פחות בודק את לוח הזמנים, לא את המשימה.