A solução sugerida é executar a unidade de serviço como um serviço normal - consulte a [Install]
seção. Então, tudo tem que ser pensado ao contrário, também dependências. Porque a ordem de desligamento é a ordem de inicialização inversa. É por isso que o script deve ser inserido ExecStop=
.
A seguinte solução está funcionando para mim:
[Unit]
Description=...
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>
[Install]
WantedBy=multi-user.target
RemainAfterExit=true
é necessário quando você não tem uma ExecStart
ação.
Após criar o arquivo, verifique systemctl daemon-reload
e systemctl enable yourservice --now
.
Acabei de obtê-lo no systemd IRC, os créditos estão indo para o mezcalero.
ExecStart=/bin/true
.RemainAfterExit=true
é necessária quando não existeExecStart
porquesystemd
não tentará executarExecStop
se achar que o serviço não está sendo executado.RemainAfterExit=true
provocasystemd
a acreditar que o serviço está sendo executado, causando assim que ele seja executadoExecStop
no desligamento.Note that it is usually not sufficient to specify a command for this setting that only asks the service to terminate (for example, by queuing some form of termination signal for it), but does not wait for it to do so.
Tanto quanto eu posso ver, faz o que eu preciso (mas não sei exatamente por que).
fonte
kexec.target
ao pouco antesWantedBy=shutdown.target reboot.target halt.target
à[Unit]
seção.Before=
&After=
não mude dependências.Para executar um serviço imediatamente antes de iniciar qualquer serviço de reinicialização / desligamento / interrupção / kexec (ou seja, no último momento antes de o sistema de arquivos raiz ser remontado como somente leitura), use esta configuração de serviço:
Ative-o com:
Para executar um script imediatamente antes da reinicialização real / shutdown / halt / kexec (quando você não pode gravar no sistema de arquivos raiz, porque foi remontado como somente leitura), adicione esse script executável ao
/usr/lib/systemd/system-shutdown
diretório.Veja também:
https://www.freedesktop.org/software/systemd/man/bootup.html
https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html
fonte
final.target
. Idealmente, gostaria que fosse a primeira coisa a ser executada após o usuário fazer$ sudo reboot
.Não tenho certeza, mas acho que você não precisa da parte da instalação, embora a tenha adicionado explicitamente. Também não testei, mas acho que deve ajudar você a começar:
fonte