מחוון ה-VPN הופך לירוק, המסלול חוזר, וחלון ה-SSH שהשארתם פתוח לעולם אינו מחזיר שורת פקודה. שחזור מסלול אינו משחזר את שיחת ה-TCP שהשתמשה בו, ולכן כל מה שהוקלד בחלון הזה אבד. אם הדאגה האמיתית היא חוצץ של עורך או מיגרציה ארוכה, הפתרון הוא להפסיק לקשור את העבודה הזו לחיבור אחד. tmux ומריץ משימות פותרים חצאים שונים של הבעיה הזו.

VPN שהתחבר מחדש אינו ממשיך את הסוקט

ל-TCP אין מושג של המשך לאחר שינוי כתובת. חיבור ה-SSH מזוהה לפי שני הקצוות, וכשהמנהרה נבנית מחדש, הכתובת המקומית עשויה להשתנות והסוקט הישן מת. השרת מבחין בכך בסופו של דבר, אבל המסוף שלכם מבחין בכך מיד.

keepalive בצד הלקוח מזהה עמית מת מוקדם יותר. הוא אינו מחזיר את ההפעלה, והוא אינו יכול לשחזר פקודה שכבר רצה. ה-keepalive הוא גלאי, לא כלי שחזור. הוא אינו אומר דבר על כך אם הפקודה המרוחקת שרדה.

שימו את העבודה על המארח המרוחק

צרו את ההפעלה על המארח המרוחק, לא על המחשב הנייד. התחברו כרגיל, הפעילו שם tmux, והריצו בו את העורך או המיגרציה. נתקו עם הקידומת המוגדרת כברירת מחדל וההפעלה ממשיכה לרוץ בזמן שחיבור ה-SSH נעלם. הפעלת tmux באופן מקומי מגנה על המעטפת שלכם מחלון סגור, לא על פקודה מרוחקת ממנהרה מתה.

ssh [email protected]
tmux new-session -s office-work

לאחר שה-VPN חוזר, פתחו חיבור SSH חדש לאותו מארח והתחברו מחדש לפי שם. האובייקט העמיד הוא ההפעלה, לא החיבור. תנו לה שם שעוד תזהו אחרי שבוע.

tmux מול מריץ משימות

tmux שומר על תהליך אינטראקטיבי חי כל עוד המארח פועל. מריץ משימות או מנהל שירותים שומר על משימה לא אינטראקטיבית חיה, מתעד את מצב היציאה שלה, ושורד את סיומה המלא של הפעלת ה-SSH. הראשון לעבודה שאתם צופים בה; השני לעבודה שאתם מתזמנים ובודקים אחר כך.

אף אחד מהם אינו שורד אתחול מחדש אלא אם המארח מוגדר לשחזר אותו. הפעלת tmux מתה עם המכונה, ומשימה חולפת מתה עם האתחול אלא אם נרשמה כיחידה. בחרו לפי מה שהעבודה חייבת לשרוד.

שתי הגישות זקוקות גם ליומן שתוכלו לקרוא לאחר ההתחברות מחדש. בלעדיו אתם יודעים שהתהליך קיים, אבל לא מה הוא עשה. רשמו את נתיב היומן ליד שם ההפעלה.

החליטו לפי מה שחייב לשרוד

החליטו לפי הדבר הגרוע ביותר שיכול לקרות אם העבודה נעצרת באמצע. הפעלת עורך מאבדת חוצצים שלא נשמרו, מה שמעצבן אבל ניתן לשחזור. מיגרציה שמקבעת מחצית מהשינויים שלה אינה כך, וזה תומך במריץ עם תוצאה מתועדת. אם המשימה אינטראקטיבית וארוכה, tmux עם יומן כתוב בדרך כלל מספיק.

systemd-run --user --unit=migrate-customers --collect ./migrate.sh

בכל בחירה שתבחרו, בדקו את התוצאה המתועדת לפני שמריצים משהו שוב. שורה אחרונה חסרה אומרת לכם מה המחשב הנייד ראה, לא מה השרת קבע. ההבחנה הזו היא הסיבה להחזיק את העבודה מחוץ לחיבור מלכתחילה, והגרסה הקטנה ביותר של זה היא מודל הניתוק וההתחברות מחדש.

מאמרים קשורים