Elencare tutti i servizi a partire dal boot


15

Sto cercando un modo per ottenere un elenco di tutti i servizi (/etc/init.d o upstart o systemd), che dovrebbero avviarsi (o essere stati avviati all'avvio).

Come si ottiene un elenco di tutti i servizi di avvio? - Conosco quella domanda e mi suggerisce di usare service --status-all.

Ma questo non mi mostra quali servizi DEVONO ESSERE IN ESECUZIONE . Chiama tutti gli script init con statusargomento " ". Questo è un elenco di tutti i servizi che potrebbero essere in esecuzione.

Ma vorrei sapere se un servizio che era stato avviato all'avvio è ancora in esecuzione.

Esempio…

Ho webfs installato. Ma non voglio che funzioni all'avvio. Così ho reso invalido: sudo update-rc.d webfs disable. E ho anche installato samba e dovrebbe essere in esecuzione all'avvio. Ma è fermo (per qualsiasi motivo). sudo service --status-allnon mi aiuta qui:

$ sudo service --status-all 2>/dev/null | grep -E 'samba$|webfs'
 [ - ]  samba
 [ - ]  webfs

Entrambi sono spenti ma non ne ho idea, quello (samba) dovrebbe essere acceso.

Così…

Come posso ottenere un elenco di tutti i servizi che si avviano all'avvio? E, come estensione, esiste un modo semplice per ottenere lo "stato" di questi servizi (in caso contrario, cercherò semplicemente questo elenco ed eseguirò "service $ service status", o qualcosa del genere).

Grazie Alexander

Modifica 04/05/2015: Sono su Ubuntu 14.04.

L'obiettivo principale di questa domanda è il seguente:

Ma vorrei sapere se un servizio che era stato avviato all'avvio è ancora in esecuzione.

Per questo initctl listmotivo , non aiuta molto. In realtà non prende in considerazione i servizi avviati dagli /etc/init.dscript (rispetto agli script di avvio in /etc/init).

Anche un elenco di /etc/rc?.d/S*non aiuta. Genererebbe un elenco di servizi, che potrebbe essere stato avviato in un determinato runlevel. Non mi mostra se un servizio, che avrebbe dovuto essere avviato, è ancora in esecuzione.

Fondamentalmente, sto cercando qualcosa di simile svcs -xa Solaris per Ubuntu. Con svcs -x, avrei output se un servizio, che è stato avviato, non è più in esecuzione. Questo, avrei bisogno anche per Ubuntu.

Motivo: vorrei avere un controllo (più o meno ...) generico per il nostro sistema di monitoraggio Icinga / Nagios, che mi avviserebbe se un servizio non è più in esecuzione, che dovrebbe essere in esecuzione. Dato che abbiamo molti server diversi per molti clienti diversi, non è davvero scalabile per definire un elenco di servizi "importanti".


Quale versione di Ubuntu?
AB


@Parto La risposta accettata in quella domanda è initctl listquale elenca i processi che sono avviati / in esecuzione, ma
quell'elenco

@AB Sono su Ubuntu 14.04.
Alexander Skwar,

@Parto askubuntu.com/questions/218/… non fornisce una risposta. Come scriveva @Serg, la risposta era da usare initctl list. Ma questo non risponde davvero, poiché mostrerebbe anche i servizi avviati manualmente. E non mostra i servizi che non sono in esecuzione.
Alexander Skwar,

Risposte:


19

Tutti i servizi iniziano all'avvio:

initctl list

Elenco di tutti i servizi esistenti nel sistema:

service --status-all

Sbagliato. Né fornire l'elenco dei servizi abilitati (avviato all'avvio). Mostrano tutti i servizi noti (alcuni dei quali possono essere disabilitati) e se sono attualmente in esecuzione (il che non significa necessariamente che siano avviati automaticamente).
Reinier Post,

2

Ecco il mio oneliner grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-

È possibile ottenere un risultato un po 'più pulito con grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'

Ora entriamo nei dettagli. I lavori di avvio sono tutti archiviati /etc/init/, giusto? Tutti i lavori lì hanno una linea che indica a quale runlevel iniziano. Runlevel 2 è un avvio normale, runlevel predefinito. Quindi, se grep tutte le righe che dicono runlevele puliamo l'output di grep con awk per abbinare solo le righe con start one runlevel # 2, otteniamo l'elenco dei lavori di avvio. Il resto è solo per formulare le esigenze, sostituire / inserire i nomi dei file nello spazio e tagliare il percorso di tali file, lasciando i nomi dei file stessi.

La !/#/parte è indirizzare le direttive di avvio eventualmente commentate, che ho aggiunto personalmente manualmente.

Tra le altre cose, c'è /etc/rc2.ddove (se ho capito bene) hai script con priorità minore.

One-liner grezzo per questo è: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}

Gli script che in quella cartella in esecuzione sul runlevel 2 sono denominati a partire da S e seguiti dal numero di priorità. Ora, fondamentalmente, otteniamo tutti i file che iniziano con S e li elenchiamo solo con un nome di priorità (devo ancora capire come ripulirlo).

Come muru ha giustamente sottolineato nei commenti, ci sono anche /etc/init/*.overridefile che possono ".modificare come verrà eseguito un lavoro senza dover modificare direttamente il suo file di configurazione" ( init manpage )

Al momento, dal momento che non ho molta esperienza con questi file, posso solo suggerire di sfogliare quei file .override usando 'grep' manual '/etc/init/*.override' per elencare i servizi che dicono di essere avviati manualmente con initctlo servicescomandi.


Si noti che a causa delle dipendenze degli eventi, non è possibile determinare facilmente se un determinato servizio comporterà l'avvio di altri servizi. C'è anche la piccola questione dei .overridefile.
muru,

@Serg grazie. Ma si tratta solo di cose upstart. Anche "ls /etc/rc2.d/* ..." non aiuta molto. Mostrerebbe quali servizi potrebbero essere stati avviati. Ma non mostra quali servizi sono ancora in esecuzione. Immagino che il punto principale del mio post non fosse chiaro. Sto cercando: ma vorrei sapere se un servizio che era stato avviato all'avvio è ancora in esecuzione. Non so se conosci Solaris. Lì, farei semplicemente "svcs -x", e se restituisce qualcosa, so che qualcosa non è in esecuzione. Avrei bisogno di qualcosa del genere per Ubuntu.
Alexander Skwar,

Beh, si potrebbe scrivere una funzione di script o bashrc per confrontare gli output del mio one liner e dell'elenco initctl. Vuoi che lo pubblichi?
Sergiy Kolodyazhnyy,

@Serg bene - se stai offrendo;)
Alexander Skwar,

2

Elenca tutti i servizi e il rispettivo stato di runlevel - stile chkconfig:

# sysv-rc-conf --list

acpid        2:on       3:on    4:on    5:on
apache-htcac 0:off      1:off   2:off   3:off   4:off   5:off   6:off
apache2      0:off      1:off   2:on    3:on    4:on    5:on    6:off

Modifica interattiva basata su testo di tutti gli elenchi:

# sysv-rc-conf

l SysV Runlevel Config   -: stop service  =/+: start service  h: help  q: quit qk
x 
x service      1       2       3       4       5       0       6       S 
x ----------------------------------------------------------------------------
x acpid       [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x apache-ht$  [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]
x apache2     [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x
x Use the arrow keys or mouse to move around.      ^n: next pg     ^p: prev pg
x                        space: toggle service on / off

Potrebbe essere necessario installarlo se non presente:

apt install sysv-rc-conf
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.