Thứ tự tắt các dịch vụ VPN và proxy trên Linux
Dừng trình tiêu thụ khi đường dẫn còn tồn tại, rồi đến proxy, rồi đến đường hầm thông qua chủ sở hữu của nó. Dùng ExecStop và TimeoutStopSec một cách có chủ đích, không phải kill diện rộng.
Tình trạng treo khi tắt máy trong lúc proxy đang chạy hiếm khi là lỗi VPN, kể cả khi VPN là thứ cuối cùng hiển thị trên màn hình. Các ứng dụng phía sau proxy vẫn đang chờ một đường dẫn sắp biến mất, và unit sở hữu đường hầm vẫn chưa được yêu cầu đóng nó. Thứ trông như dịch vụ chậm thường là vấn đề thứ tự. Việc sắp xếp thứ tự giải quyết nhiều trường hợp như vậy hơn bất kỳ thay đổi timeout nào.
Đi từ trong ra ngoài theo thứ tự ngược lại: trình tiêu thụ trước, rồi proxy, rồi đường hầm — mỗi thứ do thành phần đã khởi động nó dừng lại.
Lập danh sách các unit trước khi dừng bất cứ thứ gì
Ghi lại unit ứng dụng, unit proxy và chủ sở hữu VPN tham gia vào một lần chạy bình thường. Thêm bất kỳ trình phân giải hoặc thành phần hỗ trợ nào có động tác đóng riêng, vì đó chính là những thứ bị quên lúc hai giờ sáng. Không có danh sách đó, lệnh dừng đầu tiên bạn gõ sẽ chọn nạn nhân một cách ngẫu nhiên.
Tên là bằng chứng yếu. Proxy người dùng, proxy hệ thống và đường hầm của tài khoản khác có thể trùng tên nhưng vòng đời hoàn toàn không liên quan.
Hoàn tất công việc trước, rồi hãy dừng trình tiêu thụ
Một lần dừng có kế hoạch bắt đầu từ ứng dụng: để nó hoàn thành hoặc hủy các yêu cầu, rồi dừng proxy thông qua unit dịch vụ của nó. Nếu ứng dụng cần tiếp tục chạy sau khi đường hầm biến mất, hãy sắp xếp điều đó một cách có chủ đích thay vì để nó gắn vào một tuyến sắp biến mất.
Các yêu cầu đang trên đường tại thời điểm dừng thuộc về bản ghi, vì cơn bão thử lại ở lần khởi động sau đến từ chính đó.
ExecStop và ExecStopPost là những công cụ khác nhau
ExecStop= — đây là thao tác dừng đồng bộ; ExecStopPost= — đây là bước dọn dẹp chạy ngay cả sau một lần khởi động thất bại. Một lệnh dừng chỉ gửi tín hiệu cho tiến trình rồi trả về sẽ để systemd đi tiếp trong khi trình tiêu thụ vẫn đang xả dữ liệu. Mọi việc phải xảy ra bất kể thế nào thuộc về biến thể sau, và mọi việc phải chặn lần dừng thuộc về biến thể đồng bộ. Hãy kiểm tra unit hiệu lực và các tệp drop-in của nó thay vì sửa tệp của gói ngay tại chỗ.
Đồ thị phụ thuộc sắp xếp thứ tự các tác vụ dừng. Nó không biến một script bất đồng bộ thành đồng bộ, cũng không buộc một ứng dụng từ xa cam kết dữ liệu của nó.
Giới hạn thời gian dừng và biết cái giá của giới hạn đó
TimeoutStopSec= giới hạn cả lệnh dừng lẫn việc tự kết thúc của dịch vụ, và khi hết hạn systemd sẽ nâng lên thành kill cưỡng bức. Hãy chọn giá trị dựa trên hành vi xả dữ liệu thực tế của ứng dụng, và ghi lại những gì có thể mất khi chạm giới hạn. Một con số được chọn vì máy cần tắt nhanh hơn chính là một thiết lập mất dữ liệu dưới tên gọi khác.
Khi việc dừng vẫn chậm, hãy ghi lại unit, các tiến trình con của nó, khoảng thời gian journal và kết quả timeout. Rút ngắn mọi timeout hoặc với tay tới một kill diện rộng chính là cách những lần dừng sạch biến thành trạng thái hỏng ở lần khởi động kế tiếp.
Ngắt kết nối thông qua chủ sở hữu, rồi kiểm tra ba trường hợp
Khi trình tiêu thụ đã xuống, hãy yêu cầu trình quản lý sở hữu đường hầm ngắt kết nối: phiên bản systemd, kết nối đang hoạt động của NetworkManager hoặc dịch vụ của nhà cung cấp. Giết một tiến trình OpenVPN không liên quan không nhất thiết loại bỏ phiên đã cung cấp tuyến, và một proxy có chính sách khởi động lại có thể tạo lại yêu cầu trong khi bạn tháo dỡ đường dẫn. Hãy phối hợp chính sách đó với lần dừng có kế hoạch trước khi bắt đầu.
Kiểm tra một lần dừng bình thường, một lần dừng có yêu cầu đang hoạt động và một lần dừng mà đường hầm hỏng trước. Một trình tự lặp lại được với thời hạn tốt hơn một lần tắt nhanh chỉ chạy được một lần.