OBSERVAÇÃO : Você provavelmente deseja usar ExecStopPost=
em vez de OnFailure=
aqui (veja minha outra resposta), mas isso está tentando abordar por que sua OnFailure=
setup não está funcionando. / p>
O problema com OnFailure=
não iniciar a unidade pode ser porque ela está na seção errada, ela precisa estar na seção [Unit]
e não em [Service]
.
Você pode tentar isso:
# software.service
[Unit]
Description=Software
OnFailure=software-fail.service
[Service]
ExecStart=/bin/run_program
E:
# software-fail.service
[Unit]
Description=Delete corrupt files
[Service]
ExecStart=/bin/rm /file/to/delete
ExecStop=/bin/systemctl --user start software.service
Eu posso fazer funcionar com essa configuração.
Mas note que usar OnFailure=
não é o ideal aqui, já que você não pode realmente dizer por que o programa falhou, e encadear outro começo dele em ExecStop=
chamando /bin/systemctl start
diretamente é bem hacky ... solução usando ExecStopPost=
e olhando para o status de saída é definitivamente superior.
Se você definir OnFailure=
dentro de [Service]
, systemd (pelo menos a versão 234 do Fedora 27) reclamará com:
software.service:6: Unknown lvalue 'OnFailure' in section 'Service'
Não tenho certeza se você está vendo isso em seus registros ou não ... (Talvez isso tenha sido adicionado no systemd recente?) Isso deve ser uma dica do que está acontecendo lá ... Espero que isso ajude.