Làm cách nào để tải lại một nhóm dịch vụ systemd?


12

Tôi muốn tải lại (không khởi động lại!) Một nhóm dịch vụ khi có sự kiện.

Ví dụ: nếu tôi cập nhật chứng chỉ SSL của mình, tôi muốn mọi dịch vụ sử dụng chúng được tải lại ( nginxpostfixđến với tâm trí). Tôi không muốn nhớ dịch vụ nào trên một máy chủ nhất định sử dụng chứng chỉ SSL. Nó là đủ để nhóm chúng khi chúng được cấu hình.

Mặt khác, tôi muốn tránh thay đổi .servicecác tệp được cung cấp cùng với các gói, vì điều này sẽ yêu cầu can thiệp thủ công trong quá trình cập nhật.

Làm thế nào để tôi thực hiện điều đó?

Có một tùy chọn để dừng một nhóm dịch vụ theo yêu cầu , nhưng điều này sẽ khiến chúng không thể truy cập được trong một hoặc hai giây hoặc tệ hơn - chúng có thể ở lại cho đến khi cố định. Tôi không đủ khả năng đó.


Tôi không chắc chắn làm thế nào bạn triển khai certs, nhưng đây cũng là một pre-hook và post-hook cho hầu hết các gia hạn tự động /opt/letsencrypt/letsencrypt-auto renew --pre-hook "service nginx stop; service postfix stop; service squid stop" --post-hook "service nginx start; service postfix start; service squid start" cũng vậy: certmonger có các lệnh postave và presave
Jacob Evans

@JacobEvans Đó là những gì tôi sử dụng! Trước đó, có một vấn đề trong trình phân tích tệp cấu hình cho certbot: nó không cho phép dấu chấm phẩy. Do đó, bạn phải sử dụng một đối số dòng lệnh hoặc thực hiện nó trong một lần. Ngay bây giờ tất cả điều này là không cần thiết.
sanmai

nếu bạn .servicechỉnh sửa tệp của mình dưới dạng ghi đè, bạn có thể tránh được sự cố cập nhật. sudo systemctl edit foo.servicesẽ lưu trữ các thay đổi của bạn thay /etc/systemd/system/foo.service.d/override.confvì thay đổi foo.servicetệp đã cài đặt .
quixotic

Câu trả lời:


21

Tạo /etc/systemd/system/ssl-reload.targetvới các nội dung sau.

[Unit]
Description=Services which need reloaded with SSL certs are updated.
PropagatesReloadTo=nginx postfix

Sau đó tạo một tệp khác: /etc/systemd/system/ssl-reload.path

[Unit]
Description=Restart services which use SSL when the cert directory changes

[Path]
PathChanged=/path/to/your/ssl/certs/dir

[Install]
WantedBy=multi-user.target

Sau đó:

systemctl enable ssl-reload.path
systemctl start ssl-reload.path

Như đã nói, sau khi thay đổi thứ gì đó trong thư mục SSL của bạn, các dịch vụ mong muốn sẽ được tải lại tự động.

nếu bạn không muốn hành vi tự động, thì đừng sử dụng .pathtệp và chỉ phát hành systemctl reload ssl-reload.targetthủ công sau khi bạn thay đổi tệp SSL.

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.