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.