Eu tenho um systemd
serviço que é mais ou menos assim:
[Service]
ExecStart=/usr/local/bin/binary subcommand
User=my-user
Group=my-group
EnvironmentFile=/etc/my-service/config
Estou alterando o conteúdo de/etc/my-service/config
Devo executar daemon-reload
ou apenas recarregar o serviço?
Observe que não tenho uma ExecReload
diretiva no meu arquivo de unidade; isso afeta o systemctl reload my-service
comportamento do 's?
Nem
daemon-reload
nemreload
fará comEnvironmentFile=
que seja lido pelo seu processo principal.A página man diz que os arquivos listados com
EnvironmentFile=
serão lidos pouco antes de o processo ser executado.start
ourestart
fará com que o arquivo seja lido. Isso porquestart
ourestart
vai executar o processo.daemon-reload
que não terá nenhum efeito porquedaemon-reload
nãostart
ourestart
a unidade.reload
que não terá efeito porquereload
não cria o processo principal. Apenas dá a oportunidade de enviar um sinal ao processo principal para recarregar sua configuração. Isso é especialmente verdadeiro se você não tiverExecReload=
definido.Um experimento de apoio
Então eu monitoro o diário durante as operações:
Então eu mudo o arquivo de ambiente e não vejo nenhuma mudança na saída
Então eu tento a
systemctl reload
e não vejo nenhuma mudança na saída:Então eu tento a
daemon-reload
e não vejo nenhuma mudança na saída:Então eu tento reiniciar e ver a mudança.
Uma coisa interessante é adicionar
ExecReload=/bin/bash -c 'echo $EXAMPLE_ENV
à unidade. Nesse caso eu recebo isso:Então aqui você pode ver
systemd
que lêEnvironmentFile=
antes de iniciar oExecReload=
, mas só passa o novo ambiente para o novo processo. Não altera o ambiente dos processos existentes.Tentei novamente colocando essas
bash
coisas em um script separado para garantir que a substituição da variável de ambiente do systemd não afetasse nada durante a análise dasExec*=
linhas... Mesmo resultado.Documentação de suporte
man systemd.exec
:man systemctl
:man systemd.service
: