Apenas um sistema init pode estar ativo de uma só vez. No 16.04, isso é systemd.
Vários pacotes são fornecidos com arquivos para vários sistemas init, para que possam ser gerenciados com vários sistemas init em diferentes sistemas operacionais. No Ubuntu, às vezes, scripts para vários sistemas init são instalados, mesmo que nem todos sejam usados ao mesmo tempo.
Os sistemas de inicialização mais recentes tentam manter a compatibilidade com os mais antigos. Em particular, o systemd tenta manter a compatibilidade com os scripts init Upstart e SysV.
No caso do script "init.d" que você mencionou, esse é um script de inicialização "SysV", não um script Upstart. Além disso, os scripts init "SysV" só seriam iniciados na inicialização se fossem vinculados a um diretório como "/etc/rc5.d". Você verá que o Network Manager não tem um link simbólico instalado lá.
Para entender como systemd
gerencia scripts de inicialização "SysV" antigos, consulte Como o systemd usa o /etc/init.d scirpts? .
Agora, para responder à pergunta sobre por que funciona para reiniciar o Network Manager com "reinicialização do gerenciador de rede do serviço". O comando service
é usado com scripts Upstart e scripts init SysV, preferindo o primeiro. O Network Manager também possui um script Upstart instalado no 16.04 em /etc/init/network-manager.conf
.
Se você analisar a saída de sudo strace service network-manager restart
, poderá ter uma ideia do que está acontecendo. Primeiro, a saída mostra que systemctl
está sendo chamado, indicando que o comando está sendo redirecionado para o systemd. Primeiro, logo após abrir /usr/bin/service
, você pode ver que ele começa a ler no arquivo como um script de shell:
open("/usr/sbin/service", O_RDONLY) = 3
...
read(10, "#!/bin/sh\n\n#####################"..., 8192) = 8192
Agora que sabemos que service
é um script de shell, podemos verificar o código-fonte dele. No código-fonte, descobrimos que is_systemd
é detectado e definido. Para o caso do systemd, você pode ver que o comando foi reescrito para ser systemctl restart network-manager
.
Assim, enquanto os três sistemas init coexistem e têm alguma compatibilidade, existem camadas de complexidade. Para minimizar a complexidade do que está acontecendo no futuro, é melhor usar os arquivos unitários do systemd e a ferramenta systemctl
para gerenciar os serviços.