it-swarm.com.de

Gibt es in Ubuntu einen Befehl zum Anzeigen einer Liste ALLER Autostart-Dienste?

In Ubuntu

  1. Gibt es einen Befehl zum Anzeigen einer Liste aller Autostart-Dienste?
  2. Gibt es einen Befehl zum Überprüfen, ob ein Dienst beim Booten automatisch gestartet wird oder nicht?

Ich habe Google und IRC gemacht. Ich kann die Antwort nicht finden. Vielleicht gibt es in Ubuntu keine solchen Befehle. Anfangs dachte ich, dass alle automatisch gestarteten Dienste unter /etc/rc2.d/ sind, aber ich habe mich geirrt. Einige sind nur unter /etc/init/*.conf konfiguriert. Dann habe ich das chkconfig-Tool ausprobiert (manuell installiert), es funktioniert nicht immer. Beispielsweise gibt es das falsche Ergebnis für mongodb, das automatisch von /etc/init/mongodb.conf gestartet wird.

service --status-all und initctl list können anstelle des Autostart-Status nur den aktuellen Status der Dienste anzeigen. update-rc.d ist ein Befehl zum Ändern des Autostart-Status, anstatt den Status anzuzeigen.

Wenn es keine Antwort auf meine Frage gibt, frage ich mich nur, warum es so schwer ist, Autostart-Dienste in Ubuntu zu überprüfen.

21
SSS

Ubuntu verwendet Upstart anstelle des traditionellen init-Systems. Upstart ist stärker als init, aber etwas komplizierter als init.

Im Gegensatz dazu ist Upstart ereignisbasiert. Ein "Ereignis" kann so etwas wie "Booten" sein ... oder es kann viel spezifischer sein, wie "das Netzwerk ist jetzt einsatzbereit". Sie können festlegen, welche Skripte von welchen Ereignissen abhängen. Alles, was nicht auf ein Ereignis wartet, kann ausgeführt werden, wenn die CPU verfügbar ist.

Dieses ereignisbasierte System hat einen weiteren Vorteil: Sie können es theoretisch auch dann verwenden, wenn das System in Betrieb ist. Upstart soll schließlich Aufgaben wie das Anschließen externer Geräte wie USB-Sticks (derzeit von udev und hal ausgeführt) oder das Ausführen von Programmen zu bestimmten Zeiten (derzeit von cron ausgeführt) übernehmen.

Wie Sie jetzt wissen sollten, ist ein toter Daemon (der beim Start nicht ausgeführt wird) möglicherweise am Leben und wird aufgrund eines Ereignisses gestartet.

Ubuntu hat sowohl/etc/init für Upstart als auch /etc/init.d für die alten SysV-Dateien. Einige der darin enthaltenen Dateien sind reguläre SysV Init-Skripte, die noch nicht migriert wurden. Einige migrierte Dienste führen jedoch eine Verknüpfung von /etc/init.d zu/lib/init/upstart-job. Wenn Sie eine davon ausführen, funktioniert dies, es wird jedoch zuerst eine Warnung ausgegeben:

Verwenden Sie das Dienstprogramm service (8), z. service mysql restart

Da das Skript, das Sie aufrufen möchten, in einen Upstart-Job konvertiert wurde, können Sie auch das Dienstprogramm restart (8) verwenden, z. starte mysql neu.

Auf einem Upstart-Rechner kommt init von upstart. Anstatt ein Master-RC-Skript auszuführen, das die Skripte für ein bestimmtes Runlevel aufruft, nimmt Upstarts Init Jobs aus seinem Jobverzeichnis an.

Jetzt wissen wir, dass es keine einfache Möglichkeit gibt, Autostart-Dämonen aufzulisten. Sie sollten alle Dämonen auflisten und einzeln überprüfen. Der Dämon kann durch init oder durch upstart oder sogar durch ein späteres Ereignis gestartet werden. Der einfachste Weg, diese Liste zu erhalten, besteht darin, diesen Befehl in der Shell auszuführen:

initctl show-config

Die Ausgabe sieht folgendermaßen aus:

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

Einige Elemente wie das erste sind so einfach, dass hostname beim Start startet. Andere Elemente sehen jedoch möglicherweise komplizierter aus. (Aber zum Glück vom Menschen lesbar :-))

10
Ehsan

Tatsächlich sind alle Dienste nur unter /etc/init.d verfügbar:

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

Eine weitere Sache ist, dass alle Dienste unter rc0.drc1.drc2.drc3.drc4.drc5.drc6.d verfügbar sind, es handelt sich jedoch nur um einen symbolischen Link zu /etc/init.d.

Hier sehen Sie den Inhalt des Verzeichnisses rc1.d:

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

Hier können Sie den symbolischen Link zu init.d (K15pulseaudio -> ../init.d/pulseaudio) beobachten.

Aber hier ist jeder Dienst mit init.d verknüpft, oder? Aber nicht jeder Dienst wird gestartet. Der Grund sind zwei Skripte.

Das erste ist ein S Skript (S30killprocs) ---> start

Das zweite ist ein k Skript (K15pulseaudio) ---> kill

Alle K-Skriptdienste beenden die Dienste und alle S-Skriptdienste starten die Dienste für diesen Runlevel.

In Kürze

S70dns-clean -> ../init.d/dns-cleandns-clean-Dienst in Runlevel 1 starten.

K15pulseaudio -> ../init.d/pulseaudio beendet den Dienst pulseaudio in Runlevel 1.

5
max

Sie können sysv-rc-conf installieren, ein ncurses-Programm, mit dem Sie die rc-Ebenen grafisch konfigurieren/anzeigen können.

2
dseira

Gibt es einen Befehl zum Anzeigen einer Liste aller Autostart-Dienste?

Schau mal hier: update-rc-d-cheat-sheet

Gibt es einen Befehl zum Überprüfen, ob ein Dienst beim Booten automatisch gestartet wird oder nicht?

Keine, ich weiß von (was nichts bedeutet;), aber du kannst hier anfangen zu lesen: askubuntu forum - service dependency

0
StefanKaerst