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 service
tun , 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.
service
Befehl durch einen Wrapper zu ersetzen, der stattdessen servicectl aufruft?service
wirklich 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.Antworten:
Es gab eine Reihe von unterschiedlichen Boot- und Service-Kontrollsystemen für die verschiedenen Unix-Plattformen.
Das
service\chkconfig
Basissystem, 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
systemctl
befehlsbasierte 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/chkconfig
Befehle 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 auchsystemctl
Wrapper für ältere Systeme geben wird, um sie neben den aktuelleren zu verwalten, was weniger schmerzhaft ist;)quelle
... was, wie andere in Kommentaren gesagt haben, längst getan wurde .
Der
/usr/sbin/service
Befehl 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 ansystemctl
undinitctl
( über seine Aliase). Dies hat es seit 2013 getan.service name action
ist auch unter Nicht-Linux-Betriebssystemen weit verbreitet. Es wird sogar auf den meisten BSDs funktionieren, da auch diese ihre eigenenservice
Befehle haben. Es gibt auch einen Shim-service
Befehl im nosh-Paket, der übersetzt wird . Aber …system-control action name
service
Befehl.service
Kommandos haben seit Jahrzehnten bekannte Probleme, von denen Systemadministratoren Kriegsgeschichten erzählen.Das Aktivieren und Deaktivieren von Diensten ist eine ähnliche Situation. Obwohl das SuSE-
chkconfig
Programm (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 action
on
off
chkconfig
auf den BSDs, da die herkömmlichen Werkzeuge hierfür sind entwedersysrc
oder die neueren OpenBSDrcctl enable
undrcctl disable
. Es gibtchkconfig
undrcctl
Unterlegscheiben im nosh-Paket, die in und übersetzen .system-control enable name
system-control disable name
chkconfig
kennt sich mit systemd aus und fungiert als Shim fürsystemctl enable
undsystemctl disable
. Die SuSEchkconfig
hat keine Systemkenntnisse.Weitere Lektüre
script/service
. init-System-Helfer. Debian-Quellarchiv.telinit
. nosh Führer . 1.20. Software von JdeBP.service
Befehl . Keine Seiten. Software von JdeBP.service
. §8. FreeBSD-Handbuchseiten.quelle
Es gibt keine Standardmethode zum Starten und Beenden von Diensten unter Linux.
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:
Schauen Sie sich die LinuxService-Klasse im Ansible-
service
Modul an:quelle
Ihr Problem ist, dass Debian / Ubuntu
systemd
als Ersatz für das alte auf das neue umgestiegen istsysvinit
. 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.quelle