Quero que um script bash conclua seu trabalho (não apenas inicie) antes de um determinado systemd
serviço, cuja solução o AFAIK envolve terminar antes que seu próprio serviço termine.
A pesquisa na Web encontra perguntas sobre como começar. Pelo que entendi, Before=
a opção é esperar até que a unidade seja iniciada. Portanto lendo man systemd.service
vejo apenas uma opção Type=forking
::
o gerente de serviço considerará a unidade iniciada quando o processo pai for encerrado.
mesmo que eu não bifurque nenhum processo em um script. Estou correto aqui? Isso garantirá (além de bugs, etc.) que meu script será concluído antes do Before=
início do serviço?
Por exemplo, outro tipo: Type=exec
:
"enquanto exec não prosseguirá antes que fork() e execve() no processo de serviço sejam bem-sucedidos."
Não está claro para mim o que proceed
aqui significa, também lendo man execve
não entendo como o systemd saberá se execve
terá sucesso como:
execve() não retorna em caso de sucesso e o texto, os dados inicializados, os dados não inicializados (bss) e a pilha do processo de chamada são substituídos de acordo com o conteúdo do programa recém-carregado.
Outros tipos (notify, dbus), como vejo, man
precisam de recursos especiais desde o processo iniciado.
Eu acho que você está bem usando
type=oneshot
withRemainAfterExit=true
; da documentaçãoPode não estar totalmente claro qual é o processo principal , mas olhando a explicação
ExecStart=
encontra-se:EDITAR
Observe que
Type=oneshot
é o único tipo que permite múltiplasExecStart=
opções. Eles são executados um após o outro na ordem em que aparecem, e cada um deles é o respectivo processo principal enquanto é executado.Veja os manuais novamente: