Listen Sie alle Dienste auf, die beim Booten beginnen

14

Ich suche nach einer Möglichkeit, eine Liste aller Dienste (/etc/init.d oder upstart oder systemd) zu erhalten, die boot starten (oder gestartet wurden) sollen.

Wie bekommt man eine Liste aller Startdienste? - Ich kenne diese Frage, und es schlägt vor, zu verwenden service --status-all.

Aber das zeigt mir nicht, welche Dienste laufen sollen . Es ruft alle Init - Skripte mit " status" Argument auf. Dies ist eine Liste aller Dienste, die ausgeführt werden könnten.

Ich würde aber gerne wissen, ob ein Dienst, der beim Booten gestartet wurde, noch läuft.

Beispiel…

Ich habe WebFS installiert. Aber ich möchte nicht, dass es beim Booten läuft. Ich kann es somit deaktiviert: sudo update-rc.d webfs disable. Und ich habe auch Samba installiert und es sollte beim Booten laufen. Aber es wird gestoppt (aus welchem ​​Grund auch immer). sudo service --status-allhilft mir hier nicht:

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

Beide sind ausgeschaltet, aber ich habe keine Ahnung, dass einer (Samba) eingeschaltet sein soll.

So…

Wie kann ich eine Liste aller Dienste erhalten, die beim Booten starten? Und als Erweiterung gibt es eine einfache Möglichkeit, den "Status" dieser Dienste abzurufen (wenn nicht, gehe ich einfach über diese Liste und führe "service $ service status" oder so etwas aus).

Danke, Alexander

Bearbeiten 04.05.2015: Ich bin auf Ubuntu 14.04.

Der Schwerpunkt dieser Frage liegt auf:

Ich würde aber gerne wissen, ob ein Dienst, der beim Booten gestartet wurde, noch läuft.

Aus diesem Grund initctl listhilft nicht viel. Dabei werden die von /etc/init.dSkripten gestarteten Dienste nicht wirklich berücksichtigt (im Vergleich zu Upstart-Skripten in /etc/init).

Auch eine Auflistung von /etc/rc?.d/S*hilft nicht. Es wird eine Liste von Diensten generiert, die möglicherweise in einem bestimmten Runlevel gestartet wurden. Es wird mir nicht angezeigt, ob ein Dienst, der hätte gestartet werden sollen, noch ausgeführt wird.

Grundsätzlich suche ich so etwas wie svcs -xSolaris für Ubuntu. Mit svcs -xhätte ich ausgegeben, wenn ein Dienst, der gestartet wurde, nicht mehr läuft. Das würde ich auch für Ubuntu brauchen.

Grund: Ich hätte gerne einen (mehr oder weniger ...) generischen Check für unser Icinga / Nagios-Überwachungssystem, der mich benachrichtigt, wenn ein Dienst nicht mehr ausgeführt wird, der ausgeführt werden sollte. Da wir viele verschiedene Server für viele verschiedene Kunden haben, ist es nicht wirklich skalierbar, eine Liste "wichtiger" Dienste zu definieren.

Alexander Skwar
quelle
Welche Ubuntu-Version?
AB
@Parto Die akzeptierte Antwort in dieser Frage lautet, initctl listwelche Prozesse gestartet / ausgeführt werden.
Diese
@AB Ich bin auf Ubuntu 14.04.
Alexander Skwar
@Parto askubuntu.com/questions/218/… liefert keine Antwort. Wie @ Serg schrieb, war die Antwort dort zu verwenden initctl list. Aber das beantwortet es nicht wirklich, da es auch manuell gestartete Dienste anzeigen würde. Und es werden keine Dienste angezeigt, die nicht ausgeführt werden.
Alexander Skwar

Antworten:

18

Alle Dienste starten beim Start:

initctl list

Liste aller im System vorhandenen Dienste:

service --status-all
kaxi1993
quelle
Falsch. Geben Sie auch keine Liste der aktivierten Dienste an (die beim Start gestartet wurden). Sie zeigen alle bekannten Dienste (von denen einige möglicherweise deaktiviert sind) und ob sie gerade ausgeführt werden oder nicht (was nicht unbedingt bedeutet, dass sie automatisch gestartet werden).
Reinier Post
2

Hier ist mein Oneliner grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-

Eine etwas sauberere Ausgabe kann mit erzielt werden grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'

Kommen wir nun zu den Details. Startaufträge werden alle in gespeichert /etc/init/, richtig? Die Jobs dort haben alle eine Zeile, in der angegeben ist, auf welcher Runlevel sie starten. Runlevel 2 ist ein normaler Start, Standard-Runlevel. Wenn wir also alle Zeilen abfragen, die die runlevelAusgabe von grep mit awk anzeigen und bereinigen, um nur Zeilen mit start onund Runlevel # 2 abzugleichen, erhalten wir die Liste der Startjobs. Der Rest dient nur zum Formatieren von Anforderungen, zum Ersetzen von / in-Dateinamen in Leerzeichen und zum Wegschneiden des Pfads zu diesen Dateien, wobei die Dateinamen selbst verbleiben.

Das !/#/Teil soll evtl. auskommentierte Startanweisungen ansprechen, die ich persönlich manuell hinzugefügt habe.

Unter anderem gibt es dort, /etc/rc2.dwo Sie (wenn ich das richtig verstehe) Skripte mit geringerer Priorität haben.

Roher Einzeiler dafür ist: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}

Skripts, die in diesem Ordner tatsächlich auf Runlevel 2 ausgeführt werden, werden beginnend mit S und gefolgt von der Prioritätsnummer benannt. Im Grunde bekommen wir jetzt alle Dateien, die mit S beginnen, und listen sie nur mit dem Prioritätsnamen auf (wir müssen immer noch herausfinden, wie wir das bereinigen können).

Wie muru in den Kommentaren richtig betont hat, gibt es auch /etc/init/*.overrideDateien, die möglicherweise "... die Ausführung eines Jobs ändern, ohne dass die Konfigurationsdatei direkt geändert werden muss" ( init manpage ).

Im Moment kann ich, da ich nicht viel Erfahrung mit diesen Dateien habe, nur empfehlen, diese .override-Dateien mit dem 'grep'-Handbuch' /etc/init/*.override 'zu durchsuchen, um Dienste aufzulisten, die gestartet werden sollen manuell mit initctloder servicesbefehlen.

Sergiy Kolodyazhnyy
quelle
Beachten Sie, dass aufgrund von Ereignisabhängigkeiten nicht einfach festgestellt werden kann, ob ein bestimmter Dienst dazu führt, dass andere Dienste gestartet werden. Es gibt auch die kleine Sache der .overrideAkten.
muru
@ Serg danke. Aber das hat nur mit Emporkömmlingen zu tun. Auch "ls /etc/rc2.d/* ..." hilft nicht viel. Es wird angezeigt, welche Dienste möglicherweise gestartet wurden. Es wird jedoch nicht angezeigt, welche Dienste noch ausgeführt werden. Ich denke, der Hauptpunkt meines Beitrags war nicht klar. Ich suche: Aber ich würde gerne wissen, ob ein Dienst, der beim Booten gestartet wurde, noch läuft. Ich weiß nicht, ob ich Solaris kenne. Dort würde ich einfach "svcs -x" ausführen und wenn es etwas zurückgibt, weiß ich, dass etwas nicht läuft. Ich würde so etwas für Ubuntu brauchen.
Alexander Skwar
Nun, man könnte ein Skript oder eine bashrc-Funktion schreiben, um die Ausgaben meines einen Liners dort und der initctl-Liste zu vergleichen. Soll ich das posten?
Sergiy Kolodyazhnyy
@ Serg gut - wenn Sie anbieten;)
Alexander Skwar
2

Listen Sie alle Dienste und den jeweiligen Runlevel-Status auf - chkconfig style:

# 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

Interaktive textbasierte Bearbeitung aller aufgelisteten:

# 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

Muss möglicherweise installiert werden, wenn nicht vorhanden:

apt install sysv-rc-conf
bzean
quelle