TL; DR. Seu script de início não faz nada porque já está "iniciado", diz systemd. Você precisa parar , então você pode iniciar .
Como você pode ver na sua saída de rastreamento do shell, quando você executa
sudo /etc/init.d/usbstorage start
em um SO usando systemd como o gerenciador preferido, que é o seu caso, então a linha
. /lib/lsb/init-functions
em seu script no estilo SysV faz com que o código do shell
/lib/lsb/init-functions.d/40-systemd
para ser executado. Basicamente, você precisa do systemd equivalente ao seu arquivo, então imprime
Starting usbstorage (via systemctl)
então é executado
/bin/systemctl start usbstorage.service
e sai lá. O resto do seu script nunca é executado neste processo específico.
No entanto, cada vez que alguém chama systemctl daemon-reload
, todos os scripts /etc/init.d/*
são analisados e um pequeno arquivo unit systemd é criado para cada um deles em /run/systemd/generator/
(na inicialização) ou /run/systemd/generator.late/
.
O bloco ### BEGIN INIT INFO
comment de cada script é convertido nas dependências equivalentes do systemd.
O arquivo de unidade para seu script, usbstorage.service, incluirá essas linhas
RemainAfterExit=yes
ExecStart=/etc/init.d/usbstorage start
ExecStop=/etc/init.d/usbstorage stop
Assim, o/bin/systemctl start usbstorage.service
final emitido pouco antes do final da execução do seu script simplesmente executará seu script novamente com arg start
, como você acabou de fazer. Desta vez, o ambiente contém _SYSTEMCTL_SKIP_REDIRECT=true
, portanto, a inclusão de 40-systemd
não causará mais recursão e, em vez disso, seu script será executado normalmente.
Então, por que não faz nada quando você o executa?
Tudo está na linha RemainAfterExit=yes
. Isso faz com que o systemd considere o fato de que um start foi feito, e assim quando você emite outro start ele não fará nada, porque ele já está iniciado e "em execução ".
Você precisa primeiro de um stop , então o seu start executará seu script totalmente. Você pode verificar o estado atual do seu serviço, por exemplo:
$ sudo systemctl status usbstorage.service
* usbstorage.service - LSB: Automounts external storage if found.
Loaded: loaded (/etc/init.d/usbstorage)
Active: active (exited) since Thu 2016-07-28 15:37:24 CEST; 26min ago
Process: 7977 ExecStart=/etc/init.d/usbstorage start (code=exited, status=0/SUCCESS)
Jul 28 15:37:23 three usbstorage[7977]: <stdout/stderr of your script>
Observe como ele diz active (exited)
.
Você pode procurar no log por mensagens com
sudo journalctl -u usbstorage