Wie wähle ich aus, wie ich den Status eines Dienstes aktivieren / deaktivieren, starten / stoppen oder überprüfen möchte?

7

Wenn ich einen vom System installierten Dienst starten möchte, kann ich Folgendes tun:

# /etc/init.d/some-svc start
# initctl start some-svc
# service some-svc start
# start some-svc

Wenn ich die Ausführung eines Dienstes beim Booten deaktivieren möchte, kann ich Folgendes tun:

# rm /etc/rc2.d/S99some-svc
# update-rc.d some-svc disable
# mv /etc/init/some-svc.conf /etc/init/some-svc.conf.disabled

Dann gibt es ähnlich verschiedene Dinge, die ich tun kann, um Dienste für den Start beim Booten zu aktivieren, und so weiter.

Ich bin mir der Tatsache bewusst, dass Emporkömmling eine (relativ) neue Sache ist, und ich weiß, wie SysV init früher funktioniert hat, und ich bin mir vage einer Menge D-Bus-Unsinn bewusst, aber was ich nicht weiß ist, wie man eigentlich mit diesem Zeug interagieren soll. Zum Beispiel weiß ich nicht, wie ich leicht feststellen kann, ob es sich bei einem Dienst um einen Upstart-Job oder eine ältere SysV-Sache handelt, ohne die Quelle seiner Shell-Skripte ausführlich durchzulesen.

Also: Wenn ich einen Dienst entweder im Moment oder dauerhaft starten oder stoppen möchte, welches dieser Tools sollte ich verwenden und warum? Wenn die Antwort von einem Attribut abhängt (z. B. "Dieser Dienst unterstützt Upstart"), wie kann ich dann schnell und einfach dieses Attribut eines installierten Pakets ermitteln?

Gibt es entsprechende Tools für die Benutzeroberfläche, die sicher und korrekt mit der modernen Service-Infrastruktur interagieren können (Upstart und / oder was auch immer die Sysv-Kompatibilität ist)? Könnte ich beispielsweise zuverlässig sysv-rc-confbestimmen, welche Dienste gestartet werden sollen?

Glyphe
quelle

Antworten:

9

Funktionell gibt es keinen Unterschied zwischen diesen Aufrufmethoden.

startund stopsind symbolische Links zu initctl. serviceist ein Shell-Skript, das festlegt, ob das Init-Skript ausgeführt oder initctl verwendet werden soll.

Der einfachste Weg, um zu sehen, was ein Upstart-Job ist, ist ein Blick darauf /etc/init/. Alles dort ist ein Upstart-Job. Wenn Sie ls -l /etc/init.d/alle Dienst- und Systemaufgaben sehen. Die SysV-Init-Jobs sind echte Dateien, während die Upstart-Jobs Symlinks sind, zu /lib/init/upstart-jobdenen der Upstart-Job ordnungsgemäß aufgerufen wird .

Mit anderen Worten, Sie können Upstart-Jobs auch aufrufen, indem Sie beispielsweise aufrufen. /etc/init.d/apport restartDie Ausgabe schlägt jedoch vor, stattdessen service, start oder stop zu verwenden.

In der Praxis macht es also (noch!) Keinen Unterschied. Aber wenn ich etwas schreiben würde, würde ich sicherlich Service verwenden, starten oder stoppen, da es fast keine Chance gibt, die veraltet ist, während das Aufrufen von Diensten über /etc/init.d/ die Straße hinuntergehen könnte (obwohl wahrscheinlich nicht zu jeder Zeit) bald).

Ein Hinweis zum Deaktivieren von Diensten: Das Umbenennen der .conf-Datei funktioniert, ich empfehle es jedoch nicht. Sie können einen Dienst auf diese Weise deaktivieren. Wenn jedoch ein Paket-Upgrade verfügbar ist, kopiert dpkg eine neue Kopie des Upstart-Jobs. Ohne dies zu beabsichtigen, wird Ihr Dienst erneut aktiviert. Der richtige Weg, um einen Upstart-Job zu deaktivieren, besteht darin, eine Override-Datei zu verwenden, die den ursprünglichen Job intakt lässt.

Um beispielsweise die Apportierung zu deaktivieren, erstellen Sie einfach eine Datei mit dem Namen /etc/init/apport.override"manual".

# echo "manual" > /etc/init/apport.override

Persönlich würde ich vermeiden, zu verwenden sysv-rc-conf. Es mag sicher genug sein, um damit SysV-Jobs zu ändern, aber ich bin mir nicht sicher. Es scheint keine Upstart-Jobs zu unterstützen, und es gibt keine Möglichkeit, anhand der Schnittstelle zu erkennen, welche welche ist. Ich würde bei der update-rc.dVerwaltung von SysV-Skripten bleiben.

Weitere Informationen zum Upstart finden Sie unter:

  1. Das Upstart-Kochbuch: http://upstart.ubuntu.com/cookbook/
  2. Der Befehl man 5 init: http://manpages.ubuntu.com/manpages/precise/en/man5/init.5.html
Mark Russell
quelle
Es klingt also so, als wäre es am besten, sich daran zu halten, serviceda dies die Entscheidung trifft, direkt zum sysv-Init-Skript zu wechseln, wenn es einen Grund dafür gibt. Wenn ich einen Dienst deaktivieren möchte, muss ich herausfinden, ob es sich um einen Startjob handelt oder nicht nicht? Können Sie einen Verweis auf die Dokumentation einfügen, die ich selbst hätte finden sollen, die mich zu diesem echo "manual" ...Befehl geführt hätte?
Glyphe
Die zwei besten Quellen für Upstart-Informationen sind The Upstart Cookbook ( upstart.ubuntu.com/cookbook ) und man 5 init( manpages.ubuntu.com/manpages/precise/en/man5/init.5.html )
Mark Russell,
Und ja, Sie lesen die Antwort richtig.
Mark Russell
Das einzige, was Sie ausgelassen haben, ist meine Antwort als richtig zu markieren. :-)
Mark Russell
Ich warte nur darauf, dass Sie diese Referenzen hinzufügen!
Glyphe