Wyświetl wszystkie usługi zaczynające się przy starcie systemu

15

Szukam sposobu na uzyskanie listy wszystkich usług (/etc/init.d lub upstart lub systemd), które powinny uruchamiać się (lub były uruchamiane).

Jak uzyskać listę wszystkich usług początkowych? - Znam to pytanie i sugeruje użycie service --status-all.

Ale to nie pokazuje mi, które usługi mają być uruchomione . Wywołuje wszystkie skrypty inicjujące z statusargumentem „ ”. To jest lista wszystkich usług, które mogą być uruchomione.

Chciałbym jednak wiedzieć, czy usługa uruchomiona podczas rozruchu nadal działa.

Przykład…

Mam zainstalowany system webfs. Ale nie chcę, żeby działał przy starcie systemu. Tak więc wyłączył go: sudo update-rc.d webfs disable. Mam również zainstalowaną sambę, która powinna być uruchomiona podczas rozruchu. Ale to jest zatrzymane (z jakiegokolwiek powodu). sudo service --status-allnie pomaga mi tutaj:

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

Oba są wyłączone, ale nie mam pojęcia, że ​​jedna (samba) powinna być włączona.

Więc…

Jak mogę uzyskać listę wszystkich usług rozpoczynających się przy starcie systemu? I, jako rozszerzenie, jest łatwy sposób, aby uzyskać „status” tych usług (jeśli nie, po prostu przejdę do tej listy i uruchomię „service $ status usługi” lub coś w tym rodzaju).

Dzięki, Alexander

Edytuj 2015-05-04: Jestem na Ubuntu 14.04.

Głównym celem tego pytania jest:

Chciałbym jednak wiedzieć, czy usługa uruchomiona podczas rozruchu nadal działa.

Z tego powodu initctl listniewiele pomaga. Tak naprawdę nie bierze pod uwagę usług uruchamianych przez /etc/init.dskrypty (w porównaniu do skryptów upstart w /etc/init).

Również lista /etc/rc?.d/S*nie pomaga. Wygeneruje listę usług, które mogły zostać uruchomione na danym poziomie działania. Nie pokazuje mi, czy usługa, która powinna była zostać uruchomiona, nadal działa.

Zasadniczo szukam czegoś takiego jak svcs -xSolaris dla Ubuntu. Dzięki svcs -xmiałbym dane wyjściowe, jeśli uruchomiona usługa już nie działa. Tego też potrzebowałbym dla Ubuntu.

Powód: Chciałbym mieć (mniej więcej ...) ogólne sprawdzenie naszego systemu monitorowania Icinga / Nagios, co ostrzegłoby mnie, jeśli usługa już nie działa, która powinna być uruchomiona. Ponieważ mamy wiele różnych serwerów dla wielu różnych klientów, tak naprawdę nie ma możliwości zdefiniowania listy „ważnych” usług.

Alexander Skwar
źródło
Która wersja Ubuntu?
AB
@Parto Przyjęta odpowiedź w tym pytaniu brzmi, initctl listktóre listy procesów, które są uruchomione / uruchomione, ale ta lista obejmuje również procesy, które są uruchamiane ręcznie
Sergiy Kolodyazhnyy
@AB Jestem na Ubuntu 14.04.
Alexander Skwar
@Parto askubuntu.com/questions/218/… nie dość udziela odpowiedzi. Jak napisał @Serg, odpowiedź była dostępna initctl list. Ale to tak naprawdę na to nie odpowiada, ponieważ pokazywałoby także ręcznie uruchamiane usługi. I nie pokazuje usług, które nie są uruchomione.
Alexander Skwar

Odpowiedzi:

19

Wszystkie usługi zaczynają się przy uruchomieniu:

initctl list

Lista wszystkich usług istniejących w systemie:

service --status-all
kaxi1993
źródło
Źle. Nie dostarczaj też listy włączonych usług (uruchomionych przy uruchomieniu). Pokazują wszystkie znane usługi (niektóre z nich mogą być wyłączone) oraz to, czy są one aktualnie uruchomione (co niekoniecznie oznacza, że ​​są uruchamiane automatycznie).
Reinier Post
2

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

Za pomocą można uzyskać nieco czystszą wydajność grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'

Teraz przejdźmy do szczegółów. Wszystkie zadania upstartu są przechowywane /etc/init/, prawda? Wszystkie zadania tam mają linie określające, na którym poziomie uruchamiania zaczynają. Runlevel 2 to normalny rozruch, domyślny poziom uruchamiania. Jeśli więc grepujemy wszystkie wiersze, które mówią runleveli czyszczą wyjście grep za pomocą awk, aby dopasować tylko linie start onzi runlevel # 2, otrzymamy listę zadań upstart. Reszta służy tylko do formułowania potrzeb, zamiany / wstawiania nazw plików na spacje i odcinania ścieżek do tych plików, pozostawiając same nazwy plików.

!/#/Część jest adres ewentualnie zakomentowanym dyrektyw startowych, które ja osobiście dodawanych ręcznie.

Między innymi tam /etc/rc2.d(o ile dobrze rozumiem) masz skrypty o mniejszym priorytecie.

Surowy jednowarstwowy do tego jest: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}

Skrypty znajdujące się w tym folderze, które faktycznie działają na poziomie 2, zaczynają się od S, po której następuje numer priorytetu. Teraz, w zasadzie, otrzymujemy wszystkie pliki zaczynające się na literę S, i po prostu wymieniamy je tylko z priorytetową nazwą (wciąż musimy wymyślić, jak to wyczyścić).

Jak muru słusznie zauważyło w komentarzach, istnieją również /etc/init/*.overridepliki, które mogą „.. Modyfikować sposób uruchamiania zadania bez konieczności bezpośredniej modyfikacji pliku konfiguracyjnego” (strona man init )

W tej chwili, ponieważ nie mam dużego doświadczenia z tymi plikami, mogę tylko zasugerować przejrzenie tych plików .override, używając instrukcji „grep” /etc/init/*.override, aby wyświetlić listę usług, o których mówiono, że mają zostać uruchomione ręcznie za pomocą initctllub servicespoleceń.

Sergiy Kolodyazhnyy
źródło
Należy pamiętać, że z powodu zależności zdarzeń nie można łatwo ustalić, czy dana usługa spowoduje uruchomienie innych usług. Jest też mała kwestia .overrideplików.
mur 24.04.15
@Serg dzięki. Ale to dotyczy tylko rzeczy upstart. Również „ls /etc/rc2.d/* ...” niewiele pomaga. Wskazuje, które usługi mogły zostać uruchomione. Ale nie pokazuje, które usługi są nadal uruchomione. Chyba główny punkt mojego postu nie był jasny. Szukam: Ale chciałbym wiedzieć, jeśli usługa uruchomiona podczas rozruchu nadal działa. Nie wiem, czy znasz Solaris. Tam po prostu zrobiłbym „svcs -x”, a jeśli coś zwróci, wiem, że coś nie działa. Potrzebowałbym czegoś takiego dla Ubuntu.
Alexander Skwar
Cóż, można napisać funkcję skryptu lub funkcję bashrc, aby porównać wyniki mojego jednego linera i listy initctl. Chcesz, żebym to opublikował?
Sergiy Kolodyazhnyy
@Serg dobrze - jeśli oferujesz;)
Alexander Skwar
2

Wyświetl wszystkie usługi i odpowiedni status poziomu uruchamiania - styl 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

Interaktywna edycja tekstowa wszystkich wymienionych:

# 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

Może go zainstalować, jeśli go nie ma:

apt install sysv-rc-conf
bzean
źródło