Is there any way to tell systemd to 'rescan' for another executable when the original executable died?
Executáveis não morrem. Processos morrem. Faça a pergunta certa e a resposta aparece. Existe uma maneira de informar ao sistema sobre um novo processo de serviço principal e transferi-lo para que o processo de serviço principal antigo possa sair silenciosamente? Sim existe. É o protocolo de notify
de prontidão.
Eu nunca tentei eu mesmo, mas a maneira de fazer isso no modelo systemd é para o processo principal atual gerar o serviço de substituição executando a nova imagem do programa, então sd_notify
systemd sobre o novo MAINPID
, passar a tocha principal do processo para a nova e, em seguida, sair. (É um pouco mais complexo se o processo principal antigo tiver que negociar a entrega com o novo processo principal.)
Como eu disse, nunca usei isso, e não posso falar com nenhuma regressão nos anos intermediários, mas em 2011 é assim que as pessoas supostamente estavam resolvendo esse problema em particular.
(O outro design é, obviamente, não ter programas de serviço de auto-modificação, mas ter serviços de "atualização" separados que são executados fora do contexto de execução do serviço cujo programa está sendo atualizado.)