Como recarregar um grupo de serviços systemd?

12

Quero recarregar (não reiniciar!) Um grupo de serviços em um evento.

Por exemplo, se eu atualizar meus certificados SSL, desejo que todos os serviços que os utilizam sejam recarregados ( nginxe postfixlembre-se). Também não quero me lembrar de quais serviços em um determinado servidor usam certificados SSL. Deve ser suficiente agrupá-los quando foram configurados.

Por outro lado, eu gostaria de evitar alterar os .servicearquivos fornecidos com os pacotes, porque isso exigirá intervenção manual durante as atualizações.

Como eu faço isso?

Há uma opção para interromper um grupo de serviços mediante solicitação , mas isso os tornaria inacessíveis por um segundo ou dois, ou pior - eles podem permanecer inativos até serem corrigidos. Eu não posso permitir isso.

sanmai
fonte
Eu não sei como você implantar certificados, mas aqui também é um pré-gancho e pós-gancho para a maioria das renovações 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" também: certmonger tem comandos postSave e presave
Jacob Evans
@JacobEvans É isso que eu uso! Anteriormente, havia um problema em um analisador de arquivo de configuração para o certbot: não permitia ponto e vírgula. Portanto, você teve que usar um argumento de linha de comando ou fazê-lo de uma só vez. No momento, tudo isso é desnecessário.
sanmai
se você .serviceeditar o arquivo como substituição, poderá evitar o problema de atualização. sudo systemctl edit foo.serviceirá armazenar suas alterações em /etc/systemd/system/foo.service.d/override.confvez de alterar o foo.servicearquivo instalado .
quixotic

Respostas:

21

Crie /etc/systemd/system/ssl-reload.targetcom o seguinte conteúdo.

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

Em seguida, crie outro arquivo: /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

Então:

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

Com isso dito, depois de alterar algo em seu diretório SSL, os serviços desejados devem ser recarregados automaticamente.

se você não quiser o comportamento automático, não use o .patharquivo e emita-o systemctl reload ssl-reload.targetmanualmente depois de alterar os arquivos SSL.

Mark Stosberg
fonte