Wie funktionieren Dienste in Debian und wie kann ich sie verwalten?

79

In Windows habe ich den Dienstmanager, in dem alle Systemdienste angezeigt werden, die über Windows selbst gestartet werden können, ich habe den verwendeten Benutzer eingerichtet, die Rechteverwaltung ist vorhanden, und ich kann Variablen und einige andere Informationen an die Dienste übergeben Ich kann sie benennen und Duplikatservices für ein Programm erstellen und so weiter. Ich habe also ein Hauptverwaltungstool in Windows.

Wie kann ich das auch unter Linux machen? Wie kann ich auslösen, dass "svnserve" beim Start ausgeführt wird, oder wie kann ich Dienste so konfigurieren, dass sie in einem bestimmten Kontext ausgeführt werden. Wie kann ich alle "programmierten" Dienste anzeigen?

Erdinc Ay
quelle
9
Welche Distribution und Version verwenden Sie? Service Management (Services werden in der Unix-Welt fast immer als 'Daemons' bezeichnet) war früher einfach und halbwegs standardisiert. Die Dinge sind heutzutage vielfältiger. Und nicht immer schön. :) Also, was meinst du mit Kontext ?
Alexios
Obwohl es den Anschein hat, dass systemd langsam den Init-Systemkrieg gewinnt. Debian ist der letzte große Holdout, der noch das alte SysVinit verwendet, und ist derzeit dabei zu bestimmen, welches Init-System verwendet werden soll.
Patrick
1
Gegenwärtig arbeite ich mit Debian (neueste stabile Version) und unter Kontext verstehe ich Pfadvariablen oder einen bestimmten Benutzerkontext.
Erdinc Ay
1
Wenn Sie nur den serverBefehl unter Debian verwenden müssen, lesen
Peter Krauss

Antworten:

124

Gegenwärtig werden 3 Haupt-Init-Systeme von Linux verwendet. Vor ein paar Jahren gab es nur einen, SysVinit. In SysVinit mangelte es jedoch stark an Funktionen wie der grafischen Darstellung von Dienstabhängigkeiten, sodass es in den meisten Distributionen mittlerweile veraltet ist. Derzeit wechseln die meisten Distributionen zu systemd . Es gibt aber auch Emporkömmlinge .

Aber hier ist die Antwort auf Ihre Frage für jedes der 3 Init-Systeme:

 

SysVinit

SysVinit wird derzeit von Debian und RedHat verwendet. Die nächste Version von RedHat (7) wird jedoch systemd verwenden.

Die universelle Möglichkeit, SysVinit-Dienste beim Booten zu aktivieren, besteht darin, sie mit /etc/rc3.d(oder /etc/rc2.d) zu verknüpfen . Alle Dienstleistungen finden Sie in /etc/init.d. Beachten Sie jedoch, dass Distributionen häufig über ein eigenes Tool zum Verwalten dieser Dateien verfügen und stattdessen dieses Tool verwendet werden sollte. (Fedora / RedHat hat serviceund chkconfig, Ubuntu hat update-rc.d)

Liste Dienste:

ls /etc/init.d/

Dienst starten:

/etc/init.d/{SERVICENAME} start

oder

service {SERVICENAME} start

Dienst anhalten:

/etc/init.d/{SERVICENAME} stop

oder

service {SERVICENAME} stop

Dienst aktivieren:

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

(Mit S95wird die Reihenfolge festgelegt. S01 startet vor S02 usw.)

Dienst deaktivieren:

rm /etc/rc3.d/*{SERVICENAME}

 

Systemd

Die bekannteste Distribution, die systemd verwendet, ist Fedora. Obwohl es von vielen anderen benutzt wird. Zusätzlich wird Debian, nachdem es sich entschieden hat, systemd anstelle von upstart zu verwenden, das defacto-upstart-System für die meisten Distributionen sein (Ubuntu hat bereits angekündigt, dass sie upstart für systemd löschen werden).

Liste Dienste:

systemctl list-unit-files

Dienst starten:

systemctl start {SERVICENAME}

Dienst anhalten:

systemctl stop {SERVICENAME}

Dienst aktivieren:

systemctl enable {SERVICENAME}

Dienst deaktivieren:

systemctl disable {SERVICENAME}

 

Emporkömmling

Upstart wurde von den Ubuntu-Leuten entwickelt. Aber nachdem sich Debian für systemd entschieden hatte , kündigte Ubuntu an, sie würden den Emporkömmling fallen lassen .

Upstart wurde auch kurz von RedHat verwendet, da es in RHEL-6 vorhanden ist, aber es wird nicht häufig verwendet.

Liste Dienste:

initctl list

Dienst starten:

initctl start {SERVICENAME}

Dienst anhalten:

initctl stop {SERVICENAME}

Dienst aktivieren:

2 Möglichkeiten leider:

  1. Es wird eine Datei geben, /etc/default/{SERVICENAME}die eine Zeile enthält ENABLED=.... Ändern Sie diese Zeile in ENABLED=1.

  2. Es wird eine Datei geben /etc/init/{SERVICENAME}.override. Stellen Sie sicher, dass es enthält start(oder nicht vorhanden ist), nicht manual.

Dienst deaktivieren:

echo manual > /etc/init/{SERVICENAME}.override

Hinweis: Es gibt auch das von Gentoo verwendete Init-System 'OpenRC'. Derzeit ist Gentoo die einzige Distribution, die es verwendet, und es wird weder für die Verwendung in Betracht gezogen, noch von einer anderen Distribution unterstützt. Ich gehe also nicht auf seine Verwendung ein (obwohl ich es hinzufügen kann, wenn ich der Meinung bin, dass ich es tue).

Patrick
quelle
OpenRC ist eine Art Abstraktion für SysVinit. Es ersetzt es nicht, es ergänzt es.
Spidey
Großartige Zusammenfassung! Nur ein paar kleinere Korrekturen: RHEL 6.x (und damit CentOS 6.x und der Rest der Derivate) verwendet Upstart wie Ubuntu (obwohl die meisten Dienste ohnehin immer noch SysV-Skripte verwenden). Außerdem würde ich hinzufügen, dass "chkconfig" (RH) und "update-rc.d" (Debian) die "offiziellen" Möglichkeiten sind, Links zu rc? .D-Verzeichnissen hinzuzufügen.
rsuarez
@Rsuarez guter Punkt auf dem RHEL6-Ding. Obwohl es nicht viel zu gebrauchen scheint. Der Großteil des Systems läuft immer noch über SysVinit (17 Start-Ups, 89 SysVinit auf einem meiner RHEL6-Systeme). Und chkconfigund update-rc.dwerden erwähnt. Siehe zweiten Absatz unter SysVinit :-)
Patrick
@Patrick einig auf # 1; "Hoppla!" auf # 2 :-)
rsuarez
1
Vielen Dank für die umfassende Antwort, jetzt habe ich den Überblick. Momentan benutze ich Debian (letzter Stall), hier im deutschsprachigen Europa hat es die besten Empfehlungen, aber vielleicht werde ich es mit Redhat versuchen.
Erdinc Ay
9

Unterschiedliche Verteilungen verwenden unterschiedliche Mechanismen zum Verwalten von Diensten. Die Software zum Verwalten von Diensten heißt init , nach dem traditionellen Namen für den allerersten Prozess (mit der Prozess-ID 1), der für das Starten der anderen zuständig ist.

Debian verwendet die traditionelle SysVinit- Variante von init. Unter diesem System befindet sich eine Sammlung von Skripten im Verzeichnis /etc/init(dieser und andere Speicherorte können sich zwischen Distributionen, die SysVinit verwenden, geringfügig unterscheiden). Diese Skripte werden nicht direkt aufgerufen, sondern über symbolische Verknüpfungen in Verzeichnissen /etc/rc?.d. Das Vorhandensein und der Name dieser symbolischen Links bestimmen, wann die Dienste gestartet werden. Weitere Einzelheiten finden Sie im Kapitel über Init in der Debian-Referenz .

Schauen Sie sich an /etc/rc?.d, welche Dienste bereits vorhanden sind. Der Buchstabe oder die Ziffer vor dem Punkt ist der Runlevel. Einträge, deren Name mit beginnt, Swerden bei der startEingabe des Runlevels mit dem Argument ausgeführt , und Einträge, deren Name mit beginnt, Kwerden beim Verlassen des Runlevels ausgeführt. Die normale Runlevel-Sequenz lautet: S während des Bootens ( /etc/rcS.d/S*wird ausgeführt), dann 2 ( /etc/rc2.d/S*wird ausgeführt). Zum Zeitpunkt des Herunterfahrens /etc/rc2.d/K*werden ausgeführt, dann wechselt der Runlevel auf 0 (oder 6 für einen Neustart).

Kurz gesagt, wenn Sie ein Startskript für einen neuen Dienst erstellen möchten:

  • Schreiben Sie ein Shell-Skript in /etc/init.d. Dieses Skript muss ein Argument akzeptieren , die sein kann start, stop, force-reload, restart, oder (optional) reloadoder status. Der Unterschied zwischen reloadund restartist , dass restartäquivalent ist , stopgefolgt von , startwährend reloadneu lädt die Konfiguration ohne etwas zu stoppen (wenn der Dienst verfügbar ist); force-reloadtut, reloadwenn verfügbar und restartsonst. Beispiele finden Sie in den vorhandenen Dateien und Skripten, die beim Booten mit Debian ausgeführt werden .
  • Führen Sie update-rc.dden Befehl aus , um symbolische Links zum Starten und Beenden Ihres Dienstes zu erstellen. Die meisten Dienste werden in den Runlevels 2, 3, 4 und 5 ausgeführt.

Beachten Sie, dass es für den SVN-Zugriff möglicherweise einfacher ist, Apache einzurichten und das HTTP- oder HTTPS-Protokoll zu verwenden. Dies hat den zusätzlichen Vorteil, dass das Repository schnell über einen Webbrowser durchsucht werden kann.

Gilles
quelle
2

Ausgehend von einem traditionellen Unix-Hintergrund haben Services nichts Besonderes. Services sind nur Prozesse, aber mit zwei Ausnahmen: Sie benötigen kein Terminal und werden beim Booten gestartet. Wie sie beim Booten gestartet werden, hängt von init ab (dies kann sysv init, bsd init, upstart, systemd oder etwas anderes sein; überprüfen Sie Ihre Manpage auf init) und davon, ob Sie einen Wrapper für die Task oder für die init-Konfiguration verwenden. Nichts hindert Sie daran, einen Dienst von einem Terminal aus auszuführen. Dies ist in der Tat zu Testzwecken üblich.

hildred
quelle