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

22

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. Am Anfang dachte ich, dass alle automatisch gestarteten Dienste darunter sein würden /etc/rc2.d/, aber ich habe mich geirrt. Einige sind nur unter konfiguriert /etc/init/*.conf. Dann habe ich das chkconfigTool ausprobiert (manuell installiert), es funktioniert nicht immer. Beispielsweise gibt es das falsche Ergebnis, von mongodbdem aus automatisch gestartet wird /etc/init/mongodb.conf.

service --status-allund initctl listkann nur den aktuellen Status der Dienste anstelle des Autostart-Status anzeigen. update-rc.dist 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.

SSS
quelle
Ich denke, chkconfig --listwird richtig funktionieren? onbedeutet, dass der Dienst auf diesem Runlevel ausgeführt wird und beim Systemstart automatisch gestartet wird.
Max.
1
Wie ich in meiner Frage gepostet habe, funktioniert chkconfig nicht immer. Zum Beispiel wird es ein falsches Ergebnis für Mongodb geben. Ich denke, es könnte daran liegen, dass mongodb /etc/init/mongodb.conf verwendet, um den Autostart durchzuführen.
SSS
Wie wäre es ls /etc/rc?.d?
Toxaq

Antworten:

11

Ubuntu verwendet Upstartanstelle des traditionellen initSystems. Emporkömmling ist stärker als Init, aber ein bisschen 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), anstatt Init-Skripte über /etc/init.d aufzurufen, 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. B. mysql neu starten.

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 von initoder von upstartoder sogar von einem späteren Ereignis gestartet werden . Die einfachste Möglichkeit, diese Liste abzurufen, besteht darin, den folgenden 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 ist so einfach, hostnamestartet beim Start. Andere Elemente sehen jedoch möglicherweise komplizierter aus. (Aber zum Glück vom Menschen lesbar :-))

Ehsan
quelle
Ich wusste das meiste von dem, was du gepostet hast. Obwohl es etwas Neues gibt, das ich nicht kenne, können sie mein Problem immer noch nicht lösen. Ich möchte nur wissen, ob es einen Befehl gibt, der die Aufgabe leicht erledigen kann (sowohl für Upstart- als auch für Init-Dienste). Es scheint, Ubuntu hat keine. Was für eine Schande! Übrigens kann "initctl" nur Upstart-Dienste verarbeiten, nicht aber herkömmliche Init-Systeme. Wenn es keinen einfachen Weg gibt, muss ich den harten Weg gehen ... danke.
SSS
Ich würde bemerken, dass, obwohl nicht falsch, moderne Versionen von Ubuntu auf systemd umgezogen sind. Erstaunlicherweise ist ein guter Teil dieser Antwort immer noch gültig
Journeyman Geek
Neue Versionen von Ubuntu verwenden keinen Upstart, sondern systemd unix.stackexchange.com/a/287282/147671
João Pimentel Ferreira
5

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, alle Dienste sind auch unter vorhanden rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d, aber es ist eine symbolische Verbindung zu /etc/init.dnur.

Hier sehen Sie den Inhalt des rc1.dVerzeichnisses:

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-cleanStarten Sie den dns-cleanDienst in Runlevel 1.

K15pulseaudio -> ../init.d/pulseaudiobeendet den pulseaudioDienst in Runlevel 1.

max
quelle
Dies gilt nicht für Upstart-Services, die hier möglicherweise überhaupt nicht angezeigt werden.
Wildcard
2

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

dseira
quelle
0

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

StefanKaerst
quelle