Solo un sistema init puede estar activo a la vez. El 16.04, eso es systemd.
Varios paquetes se envían con archivos para múltiples sistemas de inicio, por lo que se pueden administrar con múltiples sistemas de inicio en diferentes sistemas operativos. En Ubuntu, a veces se instalan scripts para múltiples sistemas de inicio, a pesar de que no todos se usan al mismo tiempo.
Los sistemas init más nuevos intentan mantener la compatibilidad con los más antiguos. En particular, systemd intenta mantener la compatibilidad con los scripts de inicio Upstart y SysV.
En el caso de la secuencia de comandos "init.d" que mencionó, esa es una secuencia de comandos de inicio "SysV", no una secuencia de comandos Upstart. Además, los scripts de inicio "SysV" solo se iniciarían en el arranque si se vincularan a un directorio como "/etc/rc5.d". Encontrará que Network Manager no tiene un enlace simbólico instalado allí.
Para comprender cómo systemd
gestiona los scripts de inicio "SysV" antiguos, consulte ¿Cómo usa systemd /etc/init.d scirpts?.
Ahora, para responder a la pregunta sobre por qué funciona reiniciar Network Manager con "service network-manager restart". El service
comando se usa tanto con los scripts de Upstart como con los scripts de inicio de SysV, prefiriendo el primero. Network Manager también tiene un script Upstart instalado en 16.04 en /etc/init/network-manager.conf
.
Si revisa la salida de sudo strace service network-manager restart
, puede tener una idea de lo que está sucediendo. Primero, el resultado muestra que systemctl
se está llamando, lo que indica que el comando se está redirigiendo a systemd. Primero, poco después de que se abre /usr/bin/service
, puede ver que comienza a leerse en el archivo como un script de shell:
open("/usr/sbin/service", O_RDONLY) = 3
...
read(10, "#!/bin/sh\n\n#####################"..., 8192) = 8192
Ahora que sabemos que service
es un script de shell, podemos ver el código fuente del mismo. En el código fuente, encontramos que is_systemd
se detecta y establece. Para el caso systemd, puede ver que el comando se reescribe para sersystemctl restart network-manager
.
Entonces, si bien los tres sistemas init coexisten y tienen cierta compatibilidad, hay capas de complejidad. Para minimizar la complejidad de lo que sucede en el futuro, es mejor usar los archivos de unidad systemd y la systemctl
herramienta para administrar los servicios.