Per alcuni servizi (es: bluetooth) ho voci sia /etc/init.d/
nella /etc/init/
directory che nella directory.
Come faccio a sapere come viene avviato questo servizio? Di sysvinit
o upstart
?
Sto usando Ubuntu 14.04.
Per alcuni servizi (es: bluetooth) ho voci sia /etc/init.d/
nella /etc/init/
directory che nella directory.
Come faccio a sapere come viene avviato questo servizio? Di sysvinit
o upstart
?
Sto usando Ubuntu 14.04.
Risposte:
Puoi avere due set di script, ma hai solo un sistema init attivo. Su Ubuntu 14.04 è Upstart.
Quindi, indipendentemente dal fatto che lo script sia sotto /etc/init.d
o /etc/init
, la risposta per cui il sistema init esegue lo script in Ubuntu 14.04 è sempre Upstart.
Puoi vedere cosa succede quando provi a eseguire uno /etc/init.d
script usando strace
per registrare le chiamate di sistema a STDOUT:
sudo strace /etc/init.d/bluetooth start
Per prima cosa vedrai che lo script init carica prima alcune funzioni di intestazione /lib/lsb/init-functions
open("/lib/lsb/init-functions", O_RDONLY) = 3
Molto presto vedrai l'attività deviata su uno script correlato a Upstart:
open("/lib/lsb/init-functions.d/01-upstart-lsb", O_RDONLY) = 3
Questo è solo uno script di shell, quindi puoi aprirlo e leggere la fonte per vedere cosa fa.
Mentre continui a completare l'output, penso che vedrai che il comando viene reindirizzato per avviare lo script utilizzando lo script Upstart invece dello script init SysV.
La cosa interessante da vedere è che il 16.04 Upstart reindirizza ulteriormente il controllo su systemd e viene invece avviato il relativo servizio systemd:
write(1, "Starting bluetooth (via systemct"..., 53Starting bluetooth (via systemctl): bluetooth.service) = 53
I consigli di base per utilizzare gli script Upstart e i comandi di gestione del servizio su Ubuntu 14.04 per evitare la complessità e la potenziale confusione del livello di compatibilità SysV init. Allo stesso modo, una volta eseguito l'aggiornamento a 16.04, iniziare a utilizzare i systemd
file e il systemctl
comando nativi di unità per evitare livelli di compatibilità non necessari.