Note: this answer extends Siosm's answer, and includes an alternative solution. If you agree with the first part, please upvote Siosm's answer instead.
Na veia com a resposta do Siosm, use ConditionPathExists=
e ConditionPathNotExists
na seção [Path]
do arquivo de serviço da unidade (veja systemd.path (5)) para tornar a execução do seu serviço condicional.
Por exemplo, se a responsabilidade de myscript
é criar um arquivo ou uma pasta uma vez, adicione condições de inicialização que reflitam isso: ConditionPathNotExists=/path/to/folder
.
Por outro lado, você pode fazer com que os ConditionPathExists apontem para um arquivo como /var/tmp/myscript.on-next-reboot
que o script deve remover após a execução bem-sucedida. Você provavelmente pode adicionar a remoção como a diretiva ExecStartPost=
da unidade.
Em geral, no entanto, você deve tentar trabalhar em seu sistema para que as ações de pós-reinicialização não sejam necessárias. Definir as coisas para executar na próxima inicialização é muito "semelhante ao Windows" em atitude. Usuários e administradores de Linux tendem a favorecer botas determinísticas, modulares e previsíveis; ter valores de tempo de execução condicionais acionam diferentes caminhos de inicialização torna o sistema de inicialização muito mais difícil de avaliar e torna mais propenso a quebras.