Làm cho systemd chỉ tải lại quá trình openvpn duy nhất chứ không phải toàn bộ nhóm


7

Tôi đang chạy một số phiên bản openvpn trên máy chủ của mình với debian ổn định; cũng như một số khách hàng như một ví dụ máy chủ. Ngay bây giờ, khi một trong những trường hợp này thất bại, systemd dường như giết và khởi động lại toàn bộ nhóm quy trình:

27 tháng 5 12:09:44 tritone systemd [1]: openvpn@client_uk.service: quá trình chính đã thoát, code = exited, status = 1 / FAILURE
27 tháng 5 12:09:44 tritone systemd [1]: Đơn vị openvpn@client_uk.service nhập trạng thái không thành công.
27 tháng 5 12:10:01 tritone systemd [1]: Dừng kết nối OpenVPN với client_rhode ...
27 tháng 5 12:10:01 tritone systemd [1]: Bắt đầu kết nối OpenVPN với client_uk ...
27 tháng 5 12:10:01 tritone systemd [1]: Dừng kết nối OpenVPN với client_ukraine ...
27 tháng 5 12:10:01 tritone systemd [1]: Dừng kết nối OpenVPN với server_udp ...
27 tháng 5 12:10:01 tritone systemd [1]: Dừng dịch vụ OpenVPN ...
27 tháng 5 12:10:01 tritone systemd [1]: Bắt đầu dịch vụ OpenVPN ...
27 tháng 5 12:10:01 tritone systemd [1]: Bắt đầu dịch vụ OpenVPN.
...

Điều này cũng không mong muốn như imho thừa. Khởi động lại dịch vụ thất bại duy nhất sẽ đủ. Đây là cấu hình systemd từ /etc/systemd/system/multi-user.target.wants/openvpn.service:

[Đơn vị]
Mô tả = dịch vụ OpenVPN
Sau = mạng.target

[Dịch vụ]
Loại = oneshot
RemainAfterExit = có
ExecStart = / bin / đúng
ExecReload = / bin / true
WorkDirectory = / etc / openvpn

[Tải về]
WantedBy = multi-user.target

Tôi đã thấy các cấu hình, nơi ExecReload đã được đặt thành kill -HUP $MAINPIDvà máy chủ của tôi dường như cũng làm điều này, như trạng thái systemctl nói:

  Process: 5893 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)

Vì vậy, những gì tôi không hiểu, lệnh kill này được xác định ở đâu, nếu cấu hình systemd ExecReload thực sự nói khác? Ngoài ra, tại sao dịch vụ được khởi động lại, ngay cả khi Type=oneshotđược xác định? Tôi đang nhìn vào tập tin đúng không?

Và lệnh khởi động lại trông như thế nào? Kill sẽ không hoạt động, vì quá trình được cho là đã chết.

Chỉnh sửa: Tôi đã tìm thấy /lib/systemd/system-generators/openvpn-generator/lib/systemd/system/openvpn@.servicebây giờ, tuy nhiên, vẫn chưa rõ ràng, khi chúng được chạy hoặc thực thi. Trình tạo dường như không thành công, vì không có liên kết nào thực sự được tạo, có thể là do các hạn chế của selinux. Tuy nhiên, tập tin này dường như được sử dụng cho init. Vì vậy, tôi tự hỏi, tại sao các tập tin giả /etc/systemd/system/multi-user.target.wants/openvpn.serviceđược tạo ra ở tất cả?


Bạn có thể cung cấp đầu ra của các lệnh sau: $ systemctl -t service | grep openvpn và đầu ra của dịch vụ $ systemctl cat <....>. cho mỗi dòng từ lệnh trước?
Siosm

2
Phần lớn điều này được trả lời tại unix.stackexchange.com/questions/378749 và tại unix.stackexchange.com/questions/206058 .
JdeBP

Câu trả lời:


1

Nếu bạn sử dụng CONFIGNAME làm tên tệp cấu hình cho .conftệp của mình, bạn có thể thử

systemctl restart openvpn@CONFIGNAME.service

1
Điều này hoạt động với Debian.
Jim MacKenzie

Đây không phải là về việc khởi động lại bằng tay, mà là về việc khởi động lại tự động của cả nhóm khi một lần gặp sự cố.
Michael

Nó trông giống như một cấu hình sai. Không có nghĩa gì khi yêu cầu systemctl khởi động lại openvpn vì openvpn có các quy tắc riêng để khởi động lại các trường hợp khi chúng thất bại. Lý do duy nhất để systemctl khởi động lại ovpn là nếu có lỗi trong các phụ thuộc như cung cấp mạng.
dominix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.