Bir grup systemd hizmetini nasıl yeniden yüklerim?


12

Bir olay üzerine bir grup hizmeti yeniden yüklemek (yeniden başlatmak değil!) İstiyorum .

Örneğin, SSL sertifikalarımı güncellersem, bunları kullanan her hizmetin yeniden yüklenmesini ( nginxve postfixakla gelmesini) istiyorum. Ayrıca, belirli bir sunucudaki hangi hizmetlerin SSL sertifikaları kullandığını hatırlamak da istemiyorum. Yapılandırıldıklarında gruplandırmaları yeterli olmalıdır.

Öte yandan, .servicepaketlerle sağlanan dosyaları değiştirmekten kaçınmak istiyorum , çünkü bu güncellemeler sırasında manuel müdahale gerektirecektir.

Bunu nasıl başarabilirim?

Bir grup hizmeti istek üzerine durdurma seçeneği vardır , ancak bu bir veya iki saniye boyunca erişilemez veya daha kötüsü olur - düzeltilinceye kadar kalabilirler. Bunu karşılayamam.


Certs'i nasıl konuşlandırdığınızdan emin değilim, ancak burada da çoğu /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" otomajik yenileme için bir ön kanca ve sonrası kanca da var: certmonger post- save ve preave komutları var
Jacob Evans

@JacobEvans Bunu kullanıyorum! Daha önce certbot için bir yapılandırma dosyası ayrıştırıcısında bir sorun vardı: noktalı virgüllere izin vermedi. Bu nedenle bir komut satırı argümanı kullanmanız veya tek seferde yapmanız gerekiyordu. Şu anda tüm bunlar gereksiz yere.
sanmai

Eğer yaparsanız .servicegibi dosya düzenlemeleri geçersiz kılma Eğer güncelleme sorunu önleyebilirsiniz. yüklediğiniz dosyayı değiştirmek yerine sudo systemctl edit foo.servicedeğişikliklerinizi saklar . /etc/systemd/system/foo.service.d/override.conffoo.service
quixotic

Yanıtlar:


21

Oluşturmak /etc/systemd/system/ssl-reload.targetaşağıdaki içeriği ile.

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

Ardından başka bir dosya oluşturun: /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

Sonra:

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

Bununla birlikte, SSL dizininizdeki bir şeyi değiştirdikten sonra, istenen hizmetler otomatik olarak yeniden yüklenmelidir.

otomatik davranışı istemiyorsanız, .pathdosyayı kullanmayın ve systemctl reload ssl-reload.targetSSL dosyalarını değiştirdikten sonra manuel olarak sorun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.