Czy w Ubuntu istnieje polecenie wyświetlania listy WSZYSTKICH usług autostartu?

22

W Ubuntu

  1. Czy istnieje polecenie pokazujące listę wszystkich usług autostartu?
  2. Czy istnieje polecenie sprawdzające, czy usługa jest uruchamiana automatycznie podczas uruchamiania, czy nie?

Zrobiłem Google i IRC. Nie mogę znaleźć odpowiedzi. Być może w Ubuntu nie ma takich poleceń. Na początku myślałem, że wszystkie usługi autostartu będą poniżej /etc/rc2.d/, ale myliłem się co do tego. Niektóre są skonfigurowane tylko pod /etc/init/*.conf. Potem wypróbowałem chkconfignarzędzie (zainstalowałem je ręcznie), nie działa ono cały czas. Na przykład daje zły wynik, dla mongodbktórego jest automatycznie uruchamiany /etc/init/mongodb.conf.

service --status-alli initctl listmoże jedynie określić aktualny status usług zamiast statusu autostartu. update-rc.dto polecenie zmiany statusu autostartu zamiast pokazywania statusu.

Jeśli nie ma odpowiedzi na moje pytanie, po prostu zastanawiam się, dlaczego tak trudno jest sprawdzić usługi autostartu w Ubuntu.

SSS
źródło
Myślę, że chkconfig --listzadziała dobrze? onoznacza, że ​​usługa działa na tym poziomie pracy, a usługa ta uruchomi się automatycznie po uruchomieniu systemu.
maks.
1
Jak napisałem w moim pytaniu, chkconfig nie zawsze działa. na przykład da zły wynik dla mongodb. Myślę, że może tak być, ponieważ mongodb używa /etc/init/mongodb.conf do wykonania autostartu.
SSS,
Jak o ls /etc/rc?.d?
toxaq,

Odpowiedzi:

11

Ubuntu używa Upstartzamiast tradycyjnego initsystemu. Upstart jest silniejszy niż init, ale jest nieco bardziej skomplikowany niż init.

Natomiast Upstart opiera się na zdarzeniach. „Zdarzenie” może być czymś w rodzaju „rozruchu” ... lub może być o wiele bardziej szczegółowe, na przykład „sieć jest gotowa do użycia”. Możesz określić, które skrypty zależą od tego, które zdarzenia. Wszystko, co nie czeka na zdarzenie, może działać, gdy jest dostępny procesor.

Ten system oparty na zdarzeniach ma jeszcze jedną zaletę: możesz teoretycznie używać go nawet po uruchomieniu systemu. Upstart ma ostatecznie przejąć zadania takie jak podłączanie urządzeń zewnętrznych, takich jak pendrive'y (obecnie obsługiwane przez udev i hal), lub uruchamianie programów w określonych momentach (obecnie obsługiwanych przez crona).

Jak powinieneś teraz wiedzieć, martwy demon (który nie uruchamia się podczas uruchamiania) może być żywy i uruchamia się z powodu zdarzenia.

Ubuntu ma zarówno / etc / init, dla Upstart, jak i /etc/init.d, dla starych plików SysV. Niektóre zawarte w nim pliki to zwykłe skrypty początkowe SysV, które nie zostały jeszcze zmigrowane. Jednak niektóre migrowane usługi utrzymują łącze z /etc/init.d do / lib / init / upstart-job. Jeśli uruchomisz jeden z nich, działa, ale najpierw drukuje ostrzeżenie:

Zamiast wywoływać skrypty inicjujące przez /etc/init.d, użyj narzędzia service (8), np service mysql restart

Ponieważ skrypt, który próbujesz wywołać, został przekonwertowany na zadanie Upstart, możesz również użyć narzędzia restart (8), np. Restart mysql.

Na maszynie Upstart, init pochodzi z upstartu. Zamiast uruchamiania głównego skryptu rc, który wywołuje skrypty dla określonego poziomu uruchamiania, init Upstart pobiera zadania z katalogu zadań.

Teraz wiemy, że nie ma prostego sposobu na wyświetlenie listy demonów autostartu, powinieneś wymienić wszystkie demony i sprawdzić je pojedynczo. Demon może być uruchomiony przez initlub upstartnawet w późniejszym zdarzenia. Najprostszym sposobem na uzyskanie tej listy jest uruchomienie tego polecenia w powłoce:

initctl show-config

Dane wyjściowe wyglądają następująco:

...
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))
...

Niektóre elementy, takie jak pierwszy, są tak proste, hostnamezaczynają się przy starcie. Ale inne przedmioty mogą wyglądać na bardziej skomplikowane. (Ale na szczęście czytelne dla człowieka :-))

Ehsan
źródło
Wiedziałem większość tego, co napisałeś. Mimo że jest coś nowego, czego nie wiem, nadal nie mogą rozwiązać mojego problemu. Chciałbym tylko wiedzieć, czy istnieje polecenie, które może łatwo wykonać zadanie (zarówno dla usług upstart, jak i init). Wygląda na to, że ubuntu NIE ma takiego. Jaka szkoda! nawiasem mówiąc, „initctl” może obsługiwać tylko usługi upstart, a nie tradycyjny system init. Jeśli nie ma łatwego sposobu, muszę użyć trudnego sposobu ... dzięki.
SSS,
Chciałbym zauważyć, że choć niepoprawne współczesne wersje ubuntu przeszły na systemd. Zabawne jest, że spora część tej odpowiedzi jest nadal aktualna
Journeyman Geek
nowe wersje Ubuntu nie używają upstartu, ale systemd unix.stackexchange.com/a/287282/147671
João Pimentel Ferreira
5

W rzeczywistości wszystkie usługi są dostępne tylko w /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

Jeszcze jedno, wszystkie usługi są rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.drównież dostępne, ale jest to tylko symboliczny link do /etc/init.d.

Zobacz tutaj to jest zawartość rc1.dkatalogu:

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

Tutaj możesz zaobserwować symboliczny link do init.d (K15pulseaudio -> ../init.d/pulseaudio).

Ale tutaj każda usługa jest połączona z init.d, prawda? Ale każda usługa się nie uruchomi; powodem są dwa skrypty.

Pierwszy to skrypt S (S30killprocs) ---> start

Drugi to skrypt k (K15pulseaudio) ---> kill

Wszystkie usługi skryptowe K zabijają usługi, a wszystkie usługi skryptowe S uruchamiają usługi dla tego poziomu działania.

W skrócie

S70dns-clean -> ../init.d/dns-cleanuruchom dns-cleanusługę na poziomie 1.

K15pulseaudio -> ../init.d/pulseaudiozabija pulseaudiousługę na poziomie 1.

max
źródło
Nie dotyczy to usług upstart, które mogą się tu wcale nie pojawiać.
Wildcard
2

Możesz zainstalować sysv-rc-conf, który jest programem ncurses do graficznego konfigurowania / wyświetlania poziomów rc.

dseira
źródło
0

Czy istnieje polecenie pokazujące listę wszystkich usług autostartu?

Zajrzyj tutaj: update-rc-d-cheat-sheet

Czy istnieje polecenie sprawdzające, czy usługa jest uruchamiana automatycznie podczas uruchamiania, czy nie?

Brak, wiem o (co nic nie znaczy;), ale możesz zacząć czytać tutaj: askubuntu forum - zależność od usługi

StefanKaerst
źródło