Semelhante, mas não idêntico a Executar script no desligamento/reinicialização com systemd :
Eu quero executar um processo personalizado usando systemd
quando o sistema está sendo desligado (desligamento ou reinicialização, talvez pânico também) e quando o sistema está inicializando. Ambas as ações devem ser executadas o mais cedo possível.
Obviamente o Type
serviço será um oneshot
, mas não tenho certeza sobre o resto ( Wants
, Before
, After
, WantedBy
, etc.).
Como meu processo precisa do diário, acrescentei (entre outros):
[Unit]
DefaultDependencies=no
Wants=syslog.target
After=local-fs.target exit.target
Before=multi-user-target
[Service]
Type=oneshot
RemainAfterExit=no
[Install]
WantedBy=multi-user.target
Ao habilitar o serviço, meu programa é iniciado (via ExecStart=
) após a montagem dos sistemas de arquivos locais, mas é reiniciado imediatamente (via ExecStop=
) antes que os arquivos temporários sejam criados. Na reinicialização, ele não foi iniciado.
Após várias iterações, encontrei esta solução envolvendo duas unidades; um usado para inicializar e outro usado para desligar:
O início é registrado logo após a montagem dos sistemas de arquivos locais (conforme solicitado).
A mensagem de parada é registrada depois que os primeiros atendidos foram encerrados (executou simultaneamente com eles, eu acho).
O
TimeoutSec=5
está lá, apenas para garantir que um processo de suspensão não impeça a inicialização ou a interrupção, e provavelmente não faz sentido para ologger
.