Bagaimana cara memuat ulang sekelompok layanan systemd?

12

Saya ingin memuat ulang (tidak memulai ulang!) Sekelompok layanan pada suatu acara.

Misalnya, jika saya memperbarui sertifikat SSL saya, saya ingin setiap layanan yang menggunakannya memuat ulang ( nginxdan postfixmuncul dalam benak). Saya juga tidak ingin mengingat layanan mana di server yang diberikan menggunakan sertifikat SSL. Seharusnya cukup agar mereka dikelompokkan ketika mereka dikonfigurasi.

Di sisi lain, saya ingin menghindari mengubah .servicefile yang disediakan dengan paket, karena ini akan memerlukan intervensi manual selama pembaruan.

Bagaimana saya mencapainya?

Ada opsi untuk menghentikan sekelompok layanan berdasarkan permintaan , tetapi ini akan membuat mereka tidak dapat diakses selama satu atau dua detik, atau lebih buruk - mereka mungkin tetap down sampai diperbaiki. Saya tidak mampu membelinya.

sanmai
sumber
Saya tidak yakin bagaimana Anda menggunakan sertifikat, tetapi di sini juga ada pra-pengait dan pasca-pengait untuk sebagian besar pembaruan automagic /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" juga: certmonger memiliki perintah untuk menyimpan dan menyimpan
Jacob Evans
@JacobEvans Itulah yang saya gunakan! Sebelumnya ada masalah dalam parser file konfigurasi untuk certbot: itu tidak mengizinkan titik koma. Karena itu, Anda harus menggunakan argumen baris perintah, atau melakukannya dalam sekali jalan. Saat ini semua ini tidak perlu.
sanmai
jika Anda .servicemengedit file sebagai override, Anda dapat menghindari masalah pembaruan. sudo systemctl edit foo.serviceakan menyimpan perubahan Anda /etc/systemd/system/foo.service.d/override.confdaripada mengubah foo.servicefile yang diinstal .
quixotic

Jawaban:

21

Buat /etc/systemd/system/ssl-reload.targetdengan konten berikut.

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

Kemudian buat file lain: /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

Kemudian:

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

Dengan itu, setelah mengubah sesuatu di direktori SSL Anda, layanan yang diinginkan harus dimuat ulang secara otomatis.

Jika Anda tidak ingin perilaku otomatis, maka jangan gunakan .pathfile, dan hanya masalah systemctl reload ssl-reload.targetsecara manual setelah Anda mengubah file SSL.

Mark Stosberg
sumber