Infelizmente você não pode. Com type=simple
, o systemd rastreia o processo executado diretamente pelo parâmetro ExecStart
. Embora type=forking
ainda tivesse um problema semelhante, nesse sistema iria acompanhar o processo, e assim que ele sair, o systemd pensará que ele está morto.
A dificuldade com isso é que o systemd não tem como saber que esse é o comportamento normal da sua aplicação. Pode ser que seu aplicativo tenha um processo mestre e, em seguida, gera processos de trabalho filho. E assim, o sistema pensaria que seu mestre morreu e deixou algumas crianças por perto que precisam ser limpas.
Existem 2 maneiras de resolver isso:
- De alguma forma, crie um processo de monitoração que o systemd execute, e esse processo inicia seu aplicativo. Então, de alguma forma, esse processo de monitoramento será capaz de dizer a diferença entre a saída do aplicativo e a saída do fork. Isso pode ser bastante difícil de implementar, pois não é fácil acompanhar os filhos de um processo infantil.
Uma maneira que poderia funcionar seria criar um pipe anônimo, passar a extremidade de gravação do pipe para o processo e aguardar EOF no final de leitura dele. Contanto que seu aplicativo não feche descritores de arquivos desconhecidos, ele deve funcionar. - Altere seu aplicativo para usar
exec
em vez defork
+exec
. Desta forma, o novo processo usa o mesmo PID que o processo antigo.