ตัวบ่งชี้ VPN เปลี่ยนเป็นสีเขียว เส้นทางกลับมา แต่หน้าต่าง SSH ที่คุณเปิดค้างไว้ไม่คืนพรอมป์ต์อีกเลย การคืนเส้นทางไม่คืนบทสนทนา TCP ที่ใช้เส้นทางนั้น ทุกอย่างที่พิมพ์ในหน้าต่างนั้นจึงหายไป ถ้าความกังวลจริงคือบัฟเฟอร์ของเอดิเตอร์หรืองานโยกย้ายที่ยาวนาน ทางแก้คือเลิกผูกงานนั้นไว้กับหนึ่งการเชื่อมต่อ tmux และตัวรันงานแก้ปัญหาคนละครึ่งของเรื่องนี้

VPN ที่เชื่อมต่อใหม่ไม่ต่อซ็อกเก็ตเดิม

TCP ไม่มีแนวคิดเรื่องการต่อหลังจากที่อยู่เปลี่ยน การเชื่อมต่อ SSH ถูกระบุด้วยปลายทั้งสอง และเมื่ออุโมงค์ถูกสร้างใหม่ ที่อยู่ภายในอาจเปลี่ยนและซ็อกเก็ตเก่าก็ตาย เซิร์ฟเวอร์จะรู้ตัวในที่สุด แต่เทอร์มินัลของคุณรู้ทันที

คีพอะไลฟ์ฝั่งไคลเอนต์ ตรวจพบคู่ที่ตายได้เร็วกว่า มันไม่คืนเซสชัน และไม่สามารถกู้คำสั่งที่กำลังทำงานอยู่ได้ คีพอะไลฟ์เป็นตัวตรวจจับ ไม่ใช่เครื่องมือกู้คืน มันไม่บอกอะไรเลยว่าคำสั่งระยะไกลรอดชีวิตหรือไม่

วางงานไว้บนโฮสต์ระยะไกล

สร้างเซสชันบนโฮสต์ระยะไกล ไม่ใช่บนแล็ปท็อป เชื่อมต่อตามปกติ เริ่ม 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

ไม่ว่าคุณจะเลือกอะไร ตรวจดูผลลัพธ์ที่บันทึกไว้ก่อนจะรันอะไรอีกครั้ง บรรทัดสุดท้ายที่หายไปบอกคุณว่าแล็ปท็อปเห็นอะไร ไม่ใช่ว่าเซิร์ฟเวอร์ยืนยันอะไร ความต่างนั้นคือเหตุผลที่เก็บงานไว้นอกการเชื่อมต่อตั้งแต่แรก และ แบบจำลองการแยกตัวและการเชื่อมต่อใหม่ คือรูปแบบที่เล็กที่สุดของมัน

บทความที่เกี่ยวข้อง