È possibile attivare solo un sistema init alla volta. Il 16.04 è systemd.
Numerosi pacchetti vengono forniti con file per più sistemi Init, quindi possono essere gestiti con più sistemi Init su diversi sistemi operativi. Su Ubuntu, a volte vengono installati gli script per più sistemi init, anche se non sono tutti utilizzati contemporaneamente.
I sistemi init più recenti cercano di mantenere la compatibilità con quelli più vecchi. In particolare, systemd cerca di mantenere la compatibilità con gli script di avvio sia Upstart che SysV.
Nel caso dello script "init.d" che hai citato, si tratta di uno script init "SysV", non di uno script Upstart. Inoltre, gli script di inizializzazione "SysV" verrebbero avviati all'avvio solo se fossero collegati in modo simbolico a una directory come "/etc/rc5.d". Scoprirai che Network Manager non ha un link simbolico installato lì.
Per capire come systemd
gestisce i vecchi script di inizializzazione "SysV", vedere In che modo systemd usa gli script /etc/init.d? .
Ora, per rispondere alla domanda sul perché funziona riavviare Network Manager con "riavvio del gestore di rete del servizio". Il service
comando viene utilizzato sia con gli script Upstart che con gli script SysV init, preferendo il primo. Network Manager ha anche uno script Upstart installato il 16.04 alle /etc/init/network-manager.conf
.
Se rivedi l'output di sudo strace service network-manager restart
, puoi avere un'idea di cosa sta succedendo. Innanzitutto, l'output mostra che systemctl
viene chiamato, indicando che il comando viene reindirizzato a systemd. Innanzitutto, poco dopo l'apertura /usr/bin/service
, puoi vederlo iniziare a leggere nel file come uno script di shell:
open("/usr/sbin/service", O_RDONLY) = 3
...
read(10, "#!/bin/sh\n\n#####################"..., 8192) = 8192
Ora che sappiamo che service
è uno script di shell, possiamo andare a controllare il codice sorgente di esso. Nel codice sorgente, troviamo che is_systemd
viene rilevato e impostato. Per il caso systemd, puoi vedere che il comando viene riscritto per essere systemctl restart network-manager
.
Quindi, mentre i tre sistemi init coesistono e hanno una certa compatibilità, ci sono livelli di complessità. Per ridurre al minimo la complessità di ciò che sta accadendo in futuro, è meglio utilizzare i file di unità di sistema e lo systemctl
strumento per gestire i servizi.