systemd: executando um script no encerramento após os sistemas de arquivos serem montados somente leitura

4

Existe uma maneira de executar um script no desligamento, depois que o sistema de arquivos é remontado como somente leitura?

Eu tenho um pi de framboesa conectado a um soquete sem fio, que eu posso controlar por meio de um remetente e um script. Eu quero desligar esse soquete (desligando o framboesa) no desligamento, depois que o sistema de arquivos é montado como somente leitura.

Eu tentei isso:

[Unit]
Description=Test
DefaultDependencies=no
Requires=shutdown.target umount.target final.target
After=shutdown.target umount.target final.target

[Service]
Type=oneshot
ExecStart=/test
KillMode=none

[Install]
WantedBy=halt.target

O script / teste gera as montagens atuais. Quando é executado no desligamento, ele declara leitura / gravação para o sistema de arquivos raiz e não somente leitura conforme o esperado.

Editar:

Conteúdo de / test:

#!/bin/bash

echo -n 'Debug-Mount: ' > /dev/tty1
cat /proc/mounts | grep /dev/sda > /dev/tty1

Saída de tela ao desligar:

    
por casper 01.11.2015 / 04:14

2 respostas

3

Encontrei uma solução confiável: basta colocar o script em / usr / lib / systemd / system-shutdown /.

Veja também: link

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.

    
por 24.03.2016 / 02:27
1

Em relação ao seu script original, ele geralmente é executado antes de halt.target (note que você não fez o pedido antes de halt.target) - e os sistemas de arquivos nunca são remontados nesse ponto. systemd-shutdown (para o qual systemd execs no final - depois de atingir halt.target), mata coisas (possivelmente junto com o seu script não-ordenado =)), executa umount / swapoff / losetup final, remontando para o que não poderia ser umount, em seguida, é executado em paralelo do diretório system-shutdown, em seguida, tenta pivot_root () em / run / initrams se o desligamento existir lá (e se isso não ocorrer ou pivô falhar, prossegue com parada).

    
por 28.07.2016 / 00:35