Falha ao habilitar a unidade: Arquivo log.service: Nenhum arquivo ou diretório

1

Eu quero fazer log de algo antes de desligar ou desligar.

uname -a
Linux xxx 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux

systemctl get-default
graphical.target
runlevel
N 5

Para editar meu script.

sudo vim   /etc/systemd/system/graphical.target.wants/log.service
[Unit]
Description=Run command at shutdown
Before=shutdown.target reboot.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /home/log.sh

Para ativá-lo.

sudo systemctl  enable  log.service
Failed to enable unit: File log.service: No such file or directory

Como consertar isso? Qual é o problema com a seguinte configuração?

sudo cat   /etc/systemd/system/log.service
[Unit]
Description=Run command at shutdown
After=shutdown.target reboot.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /home/log.sh


[Install]
WantedBy=graphical.target

Habilite-o com sudo systemctl enable log.service sem nenhum problema.
Por que não há informações de log, o /home/log.sh não pode ser executado?

    
por it_is_a_literature 24.03.2018 / 05:00

1 resposta

1

Você não deve criar unidades no diretório graphical.target.wants , esse diretório é destinado a links simbólicos. Em vez disso, crie-o diretamente no diretório /etc/systemd/system .

Além disso, você deseja ter uma seção [Install] , descrevendo onde instalá-la quando o comando systemctl enable for usado. (No seu caso, você poderia usar graphical.target , embora multi-user.target seja uma escolha mais comum e seja uma dependência de graphical.target , então será puxada durante a inicialização.)

Portanto, crie isso em /etc/systemd/system/log.service :

[Unit]
Description=...

[Service]
...
ExecStop=/bin/bash /home/log.sh

[Install]
WantedBy=multi-user.target

E, em seguida, ative-o com:

$ sudo systemctl enable log.service

Isso deve funcionar então.

É possível que suas dependências estejam incorretas. Você tem Before=shutdown.target reboot.target , mas provavelmente você precisa usar uma After= de dependência para serviços que você precisa para executar antes que eles estão parados. As dependências funcionam em uma ordem inversa no desligamento, portanto, liste as que você depende (como local-fs.target , network.target ) nessa cláusula After= . A diretiva RequiresMountsFor= também pode ser interessante, para sistemas de arquivos que você precisa montar para que o seu log.sh possa ser executado ...

    
por 24.03.2018 / 05:41

Tags