In Ubuntu, esiste un comando per mostrare un elenco di TUTTI i servizi di avvio automatico?


22

In Ubuntu,

  1. Esiste un comando per mostrare un elenco di tutti i servizi di avvio automatico?
  2. Esiste un comando per verificare se un servizio è avviato automaticamente all'avvio o no?

Ho fatto Google e IRC. Non riesco a trovare la risposta. Forse non esistono comandi simili in Ubuntu. All'inizio, pensavo che tutti i servizi con avvio automatico sarebbero stati sotto /etc/rc2.d/, ma mi sbagliavo. Alcuni sono configurati solo in /etc/init/*.conf. Quindi ho provato lo chkconfigstrumento (installato manualmente), non funziona sempre. Ad esempio, fornisce il risultato errato per il mongodbquale viene avviato automaticamente /etc/init/mongodb.conf.

service --status-alle initctl listpuò solo dire lo stato corrente dei servizi anziché lo stato di avvio automatico. update-rc.dè un comando per modificare lo stato di avvio automatico invece di mostrare lo stato.

Se non c'è risposta alla mia domanda, mi chiedo solo perché è così difficile controllare i servizi di avvio automatico in Ubuntu.


Penso chkconfig --listche funzionerà giusto? onsignifica che il servizio è in esecuzione su quel runlevel e quel servizio si avvierà automaticamente all'avvio del sistema.
massimo

1
Come quello che ho pubblicato nella mia domanda, chkconfig non funziona sempre. ad esempio, darà risultati errati per mongodb. Penso che potrebbe perché mongodb usa /etc/init/mongodb.conf per fare l'avvio automatico.
SSS,

Che ne dici ls /etc/rc?.d?
Toxaq,

Risposte:


11

Ubuntu utilizza al Upstartposto del initsistema tradizionale . Upstart è più forte di init, ma è un po 'più complicato di init.

Upstart, al contrario, è basato sugli eventi. Un "evento" può essere qualcosa di simile al "boot" ... o può essere molto più specifico, come "la rete è pronta per essere utilizzata ora". È possibile specificare quali script dipendono da quali eventi. Tutto ciò che non è in attesa di un evento può essere eseguito ogni volta che è disponibile la CPU.

Questo sistema basato su eventi ha un altro vantaggio: teoricamente puoi usarlo anche dopo che il sistema è attivo e funzionante. Upstart è infine programmato per assumere compiti come o collegare dispositivi esterni come chiavette USB (attualmente gestiti da udev e hal) o eseguire programmi in orari specifici (attualmente gestiti da cron).

Come dovresti sapere ora, un demone morto (che non viene eseguito all'avvio) potrebbe essere vivo e si avvia a causa di un evento.

Ubuntu ha sia / etc / init, per Upstart, e /etc/init.d, per i vecchi file SysV. Alcuni dei file in esso contenuti sono normali script SysV Init che non sono ancora stati migrati. Ma alcuni servizi migrati mantengono un collegamento da /etc/init.d a / lib / init / upstart-job. Se esegui uno di questi, funziona, ma stampa prima un avviso:

Invece di invocare gli script di init tramite /etc/init.d, utilizzare l'utilità di servizio (8), ad es service mysql restart

Poiché lo script che si sta tentando di invocare è stato convertito in un processo Upstart, è possibile utilizzare anche l'utilità restart (8), ad esempio restart mysql.

Su una macchina Upstart, init viene avviato. Invece di eseguire uno script rc master che chiama gli script per un runlevel specifico, l'iniz di Upstart prende i lavori dalla sua directory dei lavori.

Ora sappiamo che non esiste un modo semplice per elencare i daemon di avvio automatico, dovresti elencare tutti i daemon e controllarli uno per uno. Il demone può essere avviato da inito da upstarto anche da un evento successivo. Il modo più semplice per ottenere questo elenco è eseguire questo comando nella shell:

initctl show-config

L'output è simile al seguente:

...
hostname
  start on startup
udevtrigger
  start on ((startup and started udev) and not-container)
tty2
  start on (runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))
...

Alcuni elementi come il primo è così semplice, hostnameinizia all'avvio. Ma altri elementi possono sembrare più complicati. (Ma per fortuna leggibile dall'uomo :-))


Conoscevo la maggior parte di ciò che hai pubblicato. Anche se ci sono qualcosa di nuovo che non conosco, non riescono ancora a risolvere il mio problema. Vorrei solo sapere se esiste un comando che può fare facilmente il lavoro (sia per i servizi upstart che per quelli init). Sembra che Ubuntu NON ne abbia uno. Che peccato! a proposito, "initctl" può gestire solo i servizi upstart, piuttosto che il tradizionale sistema init. Se non esiste un modo semplice, allora devo usare il modo più duro ... grazie.
SSS,

Vorrei notare che, sebbene le versioni moderne non errate di Ubuntu siano passate a systemd. In modo divertente una buona parte di questa risposta è ancora valida
Journeyman Geek

le nuove versioni di Ubuntu non utilizzano upstart ma systemd unix.stackexchange.com/a/287282/147671
João Pimentel Ferreira,

5

In realtà, tutti i servizi sono presenti solo in /etc/init.d:

rc0.d contains the services which runs in runlevel 0
rc1.d contains the services which runs in runlevel 1
rc2.d contains the services which runs in runlevel 2
rc3.d contains the services which runs in runlevel 3
rc4.d contains the services which runs in runlevel 4
rc5.d contains the services which runs in runlevel 5
rc6.d contains the services which runs in runlevel 6

Ancora una cosa, tutti i servizi sono presenti rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.danche sotto , ma è solo un collegamento simbolico /etc/init.d.

Vedi qui questo è il contenuto della rc1.ddirectory:

lrwxrwxrwx 1 root root  20 Aug 17 14:54 K15pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root  22 Nov 28 18:47 K20acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  20 Aug 17 14:54 K20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  23 Nov  7 15:24 K20openbsd-inetd -> ../init.d/openbsd-inetd
lrwxrwxrwx 1 root root  15 Aug 17 14:54 K20saned -> ../init.d/saned
lrwxrwxrwx 1 root root  27 Aug 17 14:54 K20speech-dispatcher -> ../init.d/speech-dispatcher
-rw-r--r-- 1 root root 369 Apr 14  2012 README
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S30killprocs -> ../init.d/killprocs
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S70dns-clean -> ../init.d/dns-clean

Qui puoi osservare il collegamento simbolico a init.d (K15pulseaudio -> ../init.d/pulseaudio).

Ma qui ogni servizio è collegato a init.d, giusto? Ma ogni servizio non verrà avviato; il motivo è di due script.

Il primo è uno script S (S30killprocs) ---> start

Il secondo è uno script k (K15pulseaudio) ---> kill

Tutti i servizi di script K interrompono i servizi e tutti i servizi di script S avviano i servizi per quel runlevel.

In breve

S70dns-clean -> ../init.d/dns-cleanavviare il dns-cleanservizio nel runlevel 1.

K15pulseaudio -> ../init.d/pulseaudiouccide il pulseaudioservizio nel runlevel 1.


Non è vero per i servizi upstart, che potrebbero non apparire affatto qui.
Wildcard il

2

È possibile installare sysv-rc-conf che è un programma ncurses per configurare / mostrare graficamente i livelli di rc.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.