Gibt es eine Standardmethode zum Starten und Beenden von Diensten unter Linux?

15

Bis vor kurzem gab es eine einfache und effektive Methode zum Starten / Stoppen / Neustarten von Diensten:

service nginx start|stop|restart

Das hat so viele Jahre perfekt geklappt, ... bis einige Smart-Pants beschlossen haben, sie zu verbessern, und jetzt habe ich es mit Debian / Ubuntu-Systemen zu servicetun , auf denen das Skript nichts tut (da ich das Zeug wie systemctl start nginx.service(viel, viel länger) verwenden soll. keine automatische Vervollständigung, ...)

Meine Frage bezieht sich speziell auf Debian und Ubuntu, aber es wäre auch hilfreich, CentOS / RedHat-Distributionen zu behandeln.

Gibt es also etwas, das mich vor diesen verhängnisvollen Veränderungen retten kann?

Für den Fall, dass es nicht klar war, suche ich nach einer konsistenten Möglichkeit, mit diesen umzugehen, die unter Debian 7.x, 8.x, dem neuesten Ubuntu LTS und Nicht-LTS funktionieren würde.

PS. Außerhalb des Rahmens dieser speziellen Frage werden jedoch zusätzliche Anerkennung erteilt, wenn die Lösung auch den Aktivierungs- und Deaktivierungsteil für die Dienste abdecken würde.

Sorin
quelle
5
Die Tab-Vervollständigung funktioniert für systemctl bei mir ... Und ob es Ihnen gefällt oder nicht, systemd ist jetzt der De-facto-Standard: Sie können sich auch daran gewöhnen.
Jasonwryan
1
Extra: Wenn der Dienstbefehl unbrauchbar wird, kann ich ihn entfernen? Welches Paket bietet es?
Sorin
3
Ist es nicht sinnvoll, den alten serviceBefehl durch einen Wrapper zu ersetzen, der stattdessen servicectl aufruft?
Sorin
4
@jasonwryan Ja, aber Sie können auch genau das tun , und ein Wrapper könnte damit umgehen, was den Übergang zu systemd für die Benutzer reibungsloser macht.
Dmitry Grigoryev
2
Tut das servicewirklich nichts für dich? Es funktioniert erwartungsgemäß auf meinem LMDE (das ist im Grunde ein Debian-Test), ich dachte nicht, dass das eine LMDE-spezifische Sache ist. Es funktioniert auch wie erwartet in meiner Ubuntu VM.
terdon

Antworten:

6

Es gab eine Reihe von unterschiedlichen Boot- und Service-Kontrollsystemen für die verschiedenen Unix-Plattformen.

Das service\chkconfigBasissystem, das Sie als einfach und effektiv empfanden, wird im Allgemeinen als SysVinit- Stil bezeichnet und war ein wichtiger Schritt auf dem Weg zu einer Art Standardisierung. Sie finden diese Art des Bootens unter RHEL / CentOS (EL) bis Release 6, unter Fedora bis 14 und unter Debian / Ubuntu-basierten Distributionen bis 2015. Es war jedoch nicht das einzige Boot-System, das es gab, der (einfachere) BSD-Stil Das init-System hat immer noch viele Fans.

SysVinit war keine perfekte Lösung (was ist das?) Und Systemd wurde entwickelt, um viele der Probleme zu lösen. Dies ist das systemctlbefehlsbasierte System, in dem Sie sich gerade befinden. Obwohl es nicht allgemein beliebt ist (Leute hassen Veränderung, Aufblähen usw.), besteht kein Zweifel daran, dass es in der Mehrzahl der Distributionen schnell zum Defacto-Standard wird.

Die Antwort auf Ihre ursprüngliche Frage lautet daher sofort:
Die Standardmethode zur Steuerung von Diensten in den meisten Linux-Distributionen ist jetzt systemctl!
Wie lange das noch so sein wird, ist unklar. wahrscheinlich nur bis etwas kommt, das besser ist und sich weit verbreitet.

Ich bin mir sicher, dass es Wrapper geben wird, die es Ihrem derzeitigen Favoriten ermöglichen, die service/chkconfigBefehle weiter auszuführen. Meistens sind es vernünftige Dinge, aber mit dieser besonderen Lernkurve ist es wahrscheinlich am besten, nicht dagegen anzukämpfen. Vielleicht freuen wir uns, dass es für eine Weile auch systemctlWrapper für ältere Systeme geben wird, um sie neben den aktuelleren zu verwalten, was weniger schmerzhaft ist;)

DanSut
quelle
Und davor war xinetd und davor war inetd
am
@ jas- ich denke die inetds sind wirklich dienste selbst, ich glaube sie können in allen bootsystemen existieren. Sie sind insofern eine besondere Art von Diensten, als sie eine Alternative für einige andere Dienste darstellen, die als vollständige Dienste ausgeführt werden, indem sie stattdessen auf Abruf bereitgestellt werden . Ich verstehe, woher Sie im Zusammenhang mit diesem Q kommen, nur eine andere Möglichkeit, Dienste zu starten.
DanSut
In allen Distributionen; gentoo, centos, redhat, debian, ubuntu usw., xinetd und früher inetd bestanden aus kleinen Shell-Skripten zum Starten, Stoppen und Neuladen von Konfigurationen für verschiedene Dienste, aber Sie haben Recht, sie waren in der Tat ein Dienst, genau wie systemd es ist.
Jas
Ubuntu verwendete upstart seit 6.10 und Fedora seit 9 (bis sie durch systemd ersetzt wurden) upstart.ubuntu.com , und es ist seit einigen Jahren möglich, Debian von sysvinit zu entfernen ...
James Tocknell
5

Ist es nicht sinnvoll, den alten serviceBefehl durch einen Wrapper zu ersetzen, der servicectlstattdessen [sic] aufruft ?

Ja, aber […] ein Wrapper könnte damit umgehen, was den Übergang zu systemd für die Benutzer reibungsloser macht.

... was, wie andere in Kommentaren gesagt haben, längst getan wurde .

Der /usr/sbin/serviceBefehl unter Debian 8 ist Teil des Pakets sysvinit-utils. Es ist seit 2009 dort. Es ist eine Debian-spezifische, von RedHat stammende Erweiterung des ursprünglichen sysvinit-Quellpakets, und wie aus dem Lesen des Skripts hervorgeht, erkennt es sowohl das Ausführen von Systemd als auch das Vorhandensein von Upstart-Jobs, das Auslagern von Befehlen an systemctlund initctl( über seine Aliase). Dies hat es seit 2013 getan.

service name actionist auch unter Nicht-Linux-Betriebssystemen weit verbreitet. Es wird sogar auf den meisten BSDs funktionieren, da auch diese ihre eigenen serviceBefehle haben. Es gibt auch einen Shim- serviceBefehl im nosh-Paket, der übersetzt wird . Aber …system-control action name

  • … Übersteigen Sie diese übliche Untergruppe, und es gibt weit weniger Kompatibilität.
  • … OpenBSD hat keinen serviceBefehl.
  • … Die BSD- serviceKommandos haben seit Jahrzehnten bekannte Probleme, von denen Systemadministratoren Kriegsgeschichten erzählen.

Das Aktivieren und Deaktivieren von Diensten ist eine ähnliche Situation. Obwohl das SuSE- chkconfigProgramm (das für Debian und Ubuntu verfügbar ist) sich stark von dem Fedora-Programm (das in völlig verschiedenen Programmiersprachen geschrieben ist, auch wenn eine kompiliert, eine interpretiert ist) unterscheidet, gibt es eine gemeinsame Minimalsyntax mit action being oder . Aber …chkconfig name actiononoff

  • … Auch jenseits dieser gemeinsamen Teilmenge gibt es weniger Kompatibilität.
  • ... gibt es keine chkconfigauf den BSDs, da die herkömmlichen Werkzeuge hierfür sind entweder sysrcoder die neueren OpenBSD rcctl enableund rcctl disable. Es gibt chkconfigund rcctlUnterlegscheiben im nosh-Paket, die in und übersetzen .system-control enable namesystem-control disable name
  • … Nur die Fedora chkconfigkennt sich mit systemd aus und fungiert als Shim für systemctl enableund systemctl disable. Die SuSE chkconfighat keine Systemkenntnisse.

Weitere Lektüre

JdeBP
quelle
2

Es gibt keine Standardmethode zum Starten und Beenden von Diensten unter Linux.

Gibt es etwas, das mich vor diesen verhängnisvollen Veränderungen retten kann?

Probieren Sie das Konfigurationsmanagement- / Orchestrierungs-Tool aus: Ansible , Chef , Saltstack , Puppet oder was auch immer.

Sie können einen Dienst mit Ansible starten und aktivieren:

ansible all -i inv -m service -a 'name=service-name state=started enabled=true'

Schauen Sie sich die LinuxService-Klasse im Ansible- serviceModul an:

Dies ist die Manipulationsklasse für Linux-Dienste. Sie unterstützt derzeit eine Mischung aus Binärdateien und Init-Skripten zum Steuern von Diensten, die beim Booten gestartet werden, sowie zum Steuern des aktuellen Status.

Evgeny Vereshchagin
quelle
Irgendwie scheint es Ubuntu-Leuten gelungen zu sein, das Dienstskript nach dem Wechsel zu systemd am Laufen zu halten. Wenn man nach innen schaut, scheint es klug genug zu sein, das rechte Backend zu verwenden. Kann nicht dasselbe über Debian sagen.
Sorin
1

Ihr Problem ist, dass Debian / Ubuntu systemdals Ersatz für das alte auf das neue umgestiegen ist sysvinit. Fragen Sie, welche besser ist und Sie werden einen Flammenkrieg beginnen, aber Sie können immer wieder zur alten wechseln. Aktivieren Sie diesessysvinit Kontrollkästchen, wenn Sie zurückkehren möchten.

YoMismo
quelle