System V, systemd und Upstart

Steuerung von Linux-Diensten

Init-Prozess

Der init-Prozess auf Linux-Systemen wird gemeinhin als die Mutter aller Prozesse bezeichnet. Der „init“-Prozess hat immer eine Prozess-ID von „1“ (pid von 1), er ist der erste Prozess, der vom Kernel auf Ihrem System gestartet wird. init ist die Abkürzung für Initialisierung und wird verwendet, um alle anderen Prozesse und Ihren Standard-Runlevel zu starten. Im Laufe der Zeit haben viele Distributionen den System-V-Standard für die Verwaltung von Diensten übernommen, andere Distributionen sind jedoch zu „Systemd“ oder „Upstart“ übergegangen.

SysV – System V

Wenn Ihre Linux-Distribution den „SysV“-Standard verwendet, dann untersucht init eine Datei namens „/etc/inittab“. Diese Datei enthält Ihren Standard-Runlevel, unter dem das System starten soll. Zum Beispiel würde „id:3:initdefault:“ automatisch alle Skripte in den Runlevel-3-Verzeichnisstrukturen starten.
Runlevel 1 – Einzelbenutzermodus
Runlevel 2 – Wie Runlevel 3, aber ohne NFS
Runlevel 3 – Mehrbenutzer- und Netzwerkmodus
Runlevel 4 – Unbenutzt
Runlevel 5 – Wie Runlevel 3, aber mit grafischem Desktop (X-Window-System)
Für weitere Informationen zum Bootvorgang: Booten von Linux

Ausführen von „System V“-Init-Skripten

Es kommt häufig vor, dass Sie als Administrator einen bestimmten Dienst/Daemon anhalten, starten, neu starten oder neu laden müssen. Dazu verwenden wir einen Befehl namens „service“. Mit diesem Befehl können Sie „System V“-Skripte ausführen, die sich normalerweise im Verzeichnis „/etc/init.d“ befinden. Neben der Möglichkeit, einen Dienst/Dämon zu starten und zu stoppen, können wir auch den aktuellen Status abfragen.

Befehlsbeispiele service

Statusabfrage: Hier fragen wir den aktuellen Status des Daemons „sshd“ ab

# service sshd statusopenssh-daemon (pid 1599) is running...

Status-Check auf alle Prozesse: Führt alle Ihre Init-Skripte in alphabetischer Reihenfolge mit der Option status aus. Nachfolgend ein Auszug aus der Ausgabe dieses Befehls:

# service --status-allabrt-ccpp hook is installedabrtd (pid 1708) is running...abrt-dump-oops (pid 1716) is running...acpid (pid 1487) is running...atd (pid 1740) is running...auditd (pid 1262) is running...automount (pid 1571) is running...avahi-daemon (pid 1375) is running...Usage: /etc/init.d/bluetooth {start|stop}certmonger (pid 1752) is running...cpuspeed is stoppedcrond (pid 1724) is running...cupsd (pid 1476) is running...dnsmasq is stoppedfirstboot is not scheduled to runhald (pid 1496) is running...

Stop: Hier wurde angefordert, dass der Daemon „sshd“ angehalten werden soll. Außerdem wurde die Option status ausgegeben, um den neuen Status zu überprüfen.

# service sshd stopStopping sshd: # service sshd statusopenssh-daemon is stopped

Start: Diesmal fordern wir an, dass der „sshd“ gestartet werden soll.

# service sshd startStarting sshd: 

Neustart: Diesmal wollen wir den „sshd“-Daemon „bouncen“ (anhalten und dann sofort neu starten).

# service sshd restartStopping sshd: Starting sshd: 

Neuladen: Die Option „Reload“ ist sehr nützlich, wenn Sie Änderungen an einer Konfigurationsdatei vorgenommen haben und diese Änderungen einspielen wollen.

# service sshd reloadReloading sshd: 

Upstart

Upstart ist ein ereignisbasierter Ersatz für den „init“-Daemon. Upstart wurde von einem ehemaligen Mitarbeiter der bekannten Firma geschrieben, die uns Ubuntu zur Verfügung stellt (Canonical). Die Idee hinter Upstart war es, vom traditionellen Startprozess wegzukommen, bei dem gestartete Aufgaben abgeschlossen sein mussten, bevor die nächste Aufgabe starten konnte. Upstart ist ein ereignisgesteuertes System, das es erlaubt, asynchron auf Systemereignisse zu reagieren. Upstart ist für das Starten und Stoppen von Diensten und Tasks beim Booten und Herunterfahren verantwortlich. Außerdem überwacht es diese Dienste und Tasks aktiv. Upstart ist auch in der Lage, Sysvinit-Skripte ohne Modifikation auszuführen. Verschiedene Distributionen haben Upstart als Ersatz für System V eingebunden, darunter RHEL, CentOS, Fedora. Allerdings sind viele dieser Systeme inzwischen auf „systemd“
Wie wir bereits gesehen haben, können wir unter System V Dienste/Daemons mit dem Befehl „service“ steuern, unter Upstart verwenden wir jedoch einen anderen Befehl. Der Befehl, der bei Upstart verwendet wird, ist „initctl“. Mit diesem Befehl können Sie mit dem init-Daemon kommunizieren. Im Folgenden finden Sie einige grundlegende Beispiele für die Verwendung des Befehls „initctl“.

initctl-Befehlsbeispiele

Statusprüfung: Mit dieser Option wird der Status des angegebenen Jobs abgefragt.

root@john-desktop:~# initctl status cupscups start/running, process 672

Der Jobname wird zuerst angegeben, gefolgt vom aktuellen Ziel und Zustand der Instanz und dann die Prozess-Id-Nummer.
Stop: Die Option „stop“ gibt an, dass der gewünschte Zustand „stopped“ sein soll.

root@john-desktop:~# initctl stop cupscups stop/waiting

Start: Mit der Option „start“ wird eine neue Instanz des angegebenen Jobs gestartet.

root@john-desktop:~# initctl start cupscups start/running, process 3574

Restart: Diese Option bewirkt, dass der angegebene Job neu gestartet wird. Die Instanz, die neu gestartet wird, behält ihre ursprüngliche Konfiguration.

root@john-desktop:~# initctl restart cupscups start/running, process 3606

Neuladen: Mit dieser Option wird die angegebene Instanz neu geladen.

root@john-desktop:~# initctl reload cups

Liste: List bewirkt, dass alle Jobs/Instanzen und ihr zugehöriger Status angezeigt werden. Es folgt ein Auszug aus der Ausgabe dieses Befehls:

root@john-desktop:~# initctl listavahi-daemon start/running, process 611mountall-net stop/waitingnmbd stop/waitingpasswd stop/waitingrc stop/waitingrsyslog start/running, process 601tty4 start/running, process 1080udev start/running, process 437upstart-udev-bridge start/running, process 429

Konfiguration zurückladen: Diese Option verlangt, dass der init-Daemon seine Konfigurationsdateien neu lädt. Durch diesen Befehl werden keine Jobs neu gestartet.

root@john-desktop:~# initctl reload-configuration cups

Unter normalen Umständen sollten Sie den obigen Reload-Befehl nicht ausführen müssen, da „init“ seine Konfigurationsverzeichnisse mit „inotify“ überwacht und bei einer Änderung automatisch neu lädt.

systemd

systemd ist ein weiterer Ersatz für System V. systemd steht für system daemon. Sein Name ist absichtlich klein geschrieben! systemd wurde entwickelt, um einen besseren Umgang mit Abhängigkeiten zu ermöglichen und die Fähigkeit zu haben, beim Start mehr Arbeit parallel zu erledigen. systemd unterstützt das Erstellen von Snapshots und das Wiederherstellen des Systemzustands, behält den Überblick über Prozesse, die in einer sogenannten „cgroup“ gespeichert sind, im Gegensatz zur konventionellen „PID“-Methode. systemd wurde inzwischen von vielen populären Linux-Distributionen übernommen. Fedora, Mandriva, Mageia und Arch Linux. Es gibt auch Pläne, dass systemd in neuere Versionen von RHEL (Red hat) aufgenommen wird.
Wie wir bei „System V“ und „Upstart“ gesehen haben, haben beide Typen ihre eigenen, einzigartigen Befehle zur Steuerung von Diensten. Das Gleiche gilt für systemd. Der Befehl, der unter systemd verwendet wird, ist „systemctl“. Im Folgenden finden Sie einige Beispiele für die grundlegende Funktionalität des Befehls „systemctl“.

systemd-Befehl Beschreibung
systemctl start mytest.service Startet den angegebenen Dienst
systemctl stop mytest.service Stoppt angegebenen Dienst
systemctl status mytest.service Abfrage des Status des angegebenen Dienstes
systemctl list-unit-files –type=service Listet bekannte Dienste auf, die gestartet oder gestoppt werden können
systemctl restart mytest.service Startet und stoppt dann den angegebenen Dienst
systemctl reload mytest.service Wenn unterstützt, werden die Konfigurationsdateien neu geladen
systemctl enable mytest.service Äquivalent zu chkconfig mytest on
systemctl disable mytest.service Entspricht chkconfig mytest off
systemctl is-enabled mytest.service Überprüft, ob der Dienst für den Start im aktuellen Runlevel konfiguriert ist

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.