Eu li a página de manual do serviço systemd algumas vezes, mas ainda não consigo descobrir um padrão básico do systemd:
Desejo executar um processo de inicialização uma vez (como um contêiner de docker ou formatar uma unidade) na inicialização, com êxito até a conclusão. Mas se eu usar Type = oneshot para isso, não posso usar Restart = on-fail e, se falhar, não tentará novamente o trabalho. Estou perdendo algo óbvio aqui?
Eu também tentei definir Type = simple com Restart = on-fail, mas isso em muitos casos eu preciso do seguinte comportamento (da página de manual) que os serviços oneshot oferecem:
O comportamento do oneshot é semelhante ao simples; no entanto, espera-se que o processo precise sair antes que o systemd inicie as unidades de acompanhamento.
Atualizações:
Restart=
configuração FailureAction=[self.unit]
(substitua [self.unit] pelo nome da unidade). É meio hacky, mas pelo menos explícito e fácil de seguir.
FailureAction
aceita os mesmos valores que StartLimitAction
, e todos, exceto none
acionar um desligamento de algum tipo.
Restart
e agruparmy_cmd
desta forma:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
junto com algumTimeoutStartSec
valor razoável .