Como executar um script com o systemd logo antes do desligamento?

50

O que eu preciso colocar na seção [install] , para que o systemd execute /home/me/so.pl antes do desligamento e também antes que /proc/self/net/dev seja destruído?

[Unit]
Description=Log Traffic

[Service]
ExecStart=/home/me/so.pl

[Install]
?
    
por sid_com 23.05.2012 / 18:39

4 respostas

55

A solução sugerida é executar a unidade de serviço como um serviço normal - dê uma olhada na seção [Install] . Então tudo tem que ser pensado inversamente, dependências também. Porque a ordem de encerramento é a ordem de inicialização inversa. É por isso que o script deve ser colocado em 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 ação ExecStart .

Depois de criar o arquivo, certifique-se de systemctl daemon-reload e systemctl enable yourservice --now .

Acabei de receber do IRC do systemd, os créditos vão para o mezcalero.

    
por 27.06.2012 / 16:56
7

Até onde eu vejo, isso faz o que eu preciso (mas eu não sei exatamente por quê).

[Unit]
Description=Log Traffic
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target


[Service]
ExecStart=/usr/local/bin/perl /home/me/log_traffic.pl --stop
Type=oneshot
    
por 29.05.2012 / 15:57
3

Eu não tenho certeza, mas eu não acho que você precise da parte de instalação, mas eu adicionei explicitamente. Eu também não testei, mas acho que isso deve ajudá-lo a começar:

[Unit]
Description=Log Traffic
Requires=network.target
After=network.target
Before=shutdown.target
DefaultDependencies=no

[Service]
ExecStart=/home/me/so.pl
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=shutdown.target
    
por 24.05.2012 / 06:42
3
  • Para executar um serviço logo antes de iniciar qualquer um dos serviços reboot / shutdown / halt / kexec (ou seja, no último momento antes que o sistema de arquivos raiz seja remontado somente leitura) use esta configuração de serviço:

    [Unit]
    Description=Save system clock on shutdown
    DefaultDependencies=no
    After=final.target
    
    [Service]
    Type=oneshot
    ExecStart=/usr/lib/systemd/scripts/fake-hwclock.sh save
    
    [Install]
    WantedBy=final.target
    

    Ativar com:

    systemctl enable my_service.service
    
  • Para executar um script logo antes da reinicialização atual / shutdown / halt / kexec (quando não for possível gravar no sistema de arquivos raiz, porque ele foi remontado como somente leitura), adicione este script executável ao /usr/lib/systemd/system-shutdown diretório.

    Immediately before executing the actual system halt/poweroff/reboot/kexec systemd-shutdown will run all executables in /usr/lib/systemd/system-shutdown/ and pass one arguments to them: either "halt", "poweroff", "reboot" or "kexec", depending on the chosen action. All executables in this directory are executed in parallel, and execution of the action is not continued before all executables finished.

Veja também:

link

link

    
por 01.11.2018 / 04:29