การค้างตอนปิดเครื่องขณะพร็อกซี่ทำงานนั้นไม่ค่อยเป็นบั๊กของ VPN แม้ว่า VPN จะเป็นสิ่งสุดท้ายที่เห็นบนหน้าจอ แอปพลิเคชันที่อยู่หลังพร็อกซี่ยังรอเส้นทางที่กำลังจะหายไป และยูนิตที่ถืออุโมงค์ยังไม่ถูกสั่งให้ปิดมัน สิ่งที่ดูเหมือนบริการช้าโดยปกติคือปัญหาลำดับ การจัดลำดับแก้ปัญหาเหล่านี้ได้มากกว่าการเปลี่ยน timeout ใด ๆ

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

ทำรายการยูนิตก่อนหยุดสิ่งใด

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

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

ทำงานให้เสร็จก่อน แล้วจึงหยุดผู้ใช้

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

คำขอที่อยู่ระหว่างทางตอนหยุดนั้นเป็นส่วนหนึ่งของบันทึก เพราะพายุของการลองใหม่ในครั้งถัดไปมาจากตรงนั้น

ExecStop และ ExecStopPost เป็นเครื่องมือที่ต่างกัน

ExecStop= — นี่คือการหยุดแบบซิงโครนัส; ExecStopPost= — นี่คือการล้างข้อมูลที่ทำงานแม้หลังจากเริ่มไม่สำเร็จ คำสั่งหยุดที่เพียงส่งสัญญาณไปยังโปรเซสแล้วกลับมาจะปล่อยให้ systemd เดินหน้าต่อในขณะที่ผู้ใช้ยังคงฟลัชข้อมูลอยู่ ทุกอย่างที่ต้องเกิดขึ้นไม่ว่าจะอย่างไรเป็นของรูปแบบหลัง และทุกอย่างที่ต้องบล็อกการหยุดเป็นของรูปแบบซิงโครนัส ตรวจสอบยูนิตที่มีผลและไฟล์ drop-in ของมันแทนการแก้ไฟล์แพ็กเกจในที่

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

จำกัดการหยุดและรู้ว่าขีดจำกัดนั้นมีราคาเท่าใด

TimeoutStopSec= จำกัดทั้งคำสั่งหยุดและการสิ้นสุดของบริการเอง และเมื่อขีดจำกัดหมดอายุ systemd จะยกระดับเป็นการ kill แบบบังคับ เลือกค่าจากพฤติกรรมการฟลัชจริงของแอปพลิเคชัน และจดว่าอะไรอาจสูญหายเมื่อถึงขีดจำกัด ตัวเลขที่เลือกเพราะเครื่องควรปิดเร็วขึ้นคือการตั้งค่าการสูญเสียข้อมูลในชื่ออื่น

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

ตัดการเชื่อมต่อผ่านเจ้าของ แล้วทดสอบสามกรณี

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

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

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