Một instance OpenVPN xuất hiện lúc khởi động dưới một tên bạn không nhận ra, và việc dừng nó chỉ có tác dụng đến lần khởi động lại tiếp theo. Kiểu đó nghĩa là bạn đã gỡ tiến trình nhưng chưa gỡ cơ chế kích hoạt. Đây là hai đối tượng khác nhau, và chỉ một trong hai hiện trên màn hình trạng thái. Tìm ra cơ chế kích hoạt cần bốn lệnh chỉ đọc và một quyết định.

Trước tiên hãy gọi đúng tên unit

Hãy bắt đầu từ tên unit trong journal chứ không phải từ tên tệp profile. Instance có thể tên là openvpn@, openvpn-client@, openvpn-server@ hoặc thứ gì đó riêng của bản phân phối, và đoán tên sẽ đưa bạn đến template sai. Kết quả trạng thái nêu tên unit thực sự đã chạy, và đó là cái tên duy nhất có ý nghĩa ở đây. Hãy sao chép chính xác, kể cả mọi hậu tố.

Các lệnh sau mô tả unit đó mà không thay đổi gì. systemctl show báo cáo đường dẫn fragment, đường dẫn nguồn, trạng thái tệp unit, mọi drop-in và thứ đã kích hoạt nó. list-dependencies --reverse cho biết những unit đã nạp nào trỏ tới nó. Cả hai đều chỉ đọc, nên hãy chạy chúng trước khi hình thành giả thuyết.

Thay tên quan sát được ở mọi nơi. Một tên ví dụ được sao chép là cách phổ biến nhất để điều tra sai dịch vụ, và nó tạo ra những câu trả lời tự tin về một unit chưa bao giờ chạy.

Đọc template để biết tên tệp

Một unit instance là phần mở rộng của template, và template quyết định tệp cấu hình nào nó đọc. Một dòng lệnh kết thúc bằng phần giữ chỗ riêng cho instance sẽ được phân giải thành tên instance cộng với hậu tố. Nếu hậu tố là .conf và instance tên là old, tệp là old.conf. Nếu bạn đặt tên instance là old.conf, cùng template đó sẽ yêu cầu old.conf.conf.

Chi tiết đó giải thích một nhóm bản trùng. Ai đó thêm instance thứ hai dưới tên sai, cái đầu vẫn chạy, và máy chủ cuối cùng có hai tunnel và một nhật ký khó hiểu.

Hãy đọc template hiệu lực thay vì tệp mà bạn nhớ là đã sửa. Một drop-in có thể thay thế dòng lệnh, và phần thay thế mới là thứ chạy khi khởi động.

Lần theo cách nó đi vào giao dịch khởi động

Ba đường thường gặp: một liên kết wants từ target, một yêu cầu từ unit khác, hoặc một unit do generator gói tạo ra. Danh sách phụ thuộc ngược bao gồm hai trường hợp đầu như các mục đồ thị đã nạp. Nó không bao gồm timer, hook hay yêu cầu bên ngoài, nên danh sách chỉ là bằng chứng chứ không phải cuộc kiểm toán đầy đủ.

Đầu ra được tạo dưới /run/systemd/generator là sản phẩm, không phải nguồn. Việc sửa nó chỉ tồn tại đến lần tạo tiếp theo, nên một bản sửa áp dụng ở đó có vẻ thành công rồi lại quay về.

Hãy kiểm tra đầu vào được ghi tài liệu của gói trước khi giả định generator đọc từ đâu. Việc quét một thư mục không có tài liệu là lý do thường gặp khiến một unit xuất hiện mà không có liên kết kích hoạt.

Gỡ cơ chế kích hoạt, không chỉ tiến trình

Nếu instance được kích hoạt trực tiếp và thực sự lỗi thời, systemctl disable --now sẽ dừng nó và gỡ liên kết khởi động trong một bước. Trước hết hãy kiểm tra rằng tunnel này không phải đường quản trị duy nhất của bạn tới máy chủ. Lệnh này là ví dụ về vòng đời, không phải gợi ý dừng mọi VPN trên máy. Hãy chạy kiểm tra trước lệnh, không phải sau.

Hai nửa có thể tách rời và thường bị nhầm lẫn. Tắt không dừng một dịch vụ đang chạy, và dừng không gỡ cơ chế kích hoạt, nên một lệnh nửa vời giải thích vấn đề quay lại khi khởi động.

Một unit đã tắt vẫn có thể bị khởi động bởi unit khác hoặc bởi một yêu cầu rõ ràng. Khi generator sở hữu cơ chế kích hoạt, hãy sửa đầu vào của generator thay vì tắt đầu ra của nó. Việc che giấu chặn nhiều đường hơn nhưng có thể làm hỏng phụ thuộc, nên nó không thay thế sự hiểu biết.

Xác minh bằng khởi động lại, không bằng màn hình trạng thái

Nạp lại systemd nếu định nghĩa unit hoặc đầu vào generator đã thay đổi, rồi kiểm tra trạng thái kết quả. Nạp lại daemon không đẩy profile mới vào một tunnel đang chạy, nên hai lần kiểm tra là tách biệt. Hãy lên lịch khởi động lại và xác nhận instance vẫn vắng mặt trong khi tunnel dự định vẫn hoạt động.

Giữ profile cũ cho đến khi hiểu rõ quyền sở hữu của nó, rồi gỡ nó qua quy trình dự định. Thành công là một unit vắng mặt và một đường truy cập hoạt động, không phải một unit lỗi bị thiếu trên một màn hình.

Bài viết liên quan