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-all
hilft 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 list
hilft nicht viel. Dabei werden die von /etc/init.d
Skripten 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 -x
Solaris für Ubuntu. Mit svcs -x
hä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.
quelle
initctl list
welche Prozesse gestartet / ausgeführt werden.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.Antworten:
Alle Dienste starten beim Start:
Liste aller im System vorhandenen Dienste:
quelle
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 dierunlevel
Ausgabe von grep mit awk anzeigen und bereinigen, um nur Zeilen mitstart on
und 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.d
wo 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/*.override
Dateien, 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
initctl
oderservices
befehlen.quelle
.override
Akten.Listen Sie alle Dienste und den jeweiligen Runlevel-Status auf - chkconfig style:
Interaktive textbasierte Bearbeitung aller aufgelisteten:
Muss möglicherweise installiert werden, wenn nicht vorhanden:
quelle