Seit Ubuntu 15.04 Vivid Vervet wurde der Systemd-Daemon-Manager als Ersatz für Upstart in Ubuntu integriert. Wir werden uns nicht mit der Frage befassen, ob es eine gute oder eine schlechte Entscheidung von Canonical war, systemd einzuführen, aber da es unter Ubuntu 16.04 viele Programme gibt, die systemd zum Verwalten ihrer Dämonen verwenden, war es notwendig, ein kleines Tutorial zum Erstellen von Diensten zu schreiben in Ubuntu 16.04 mit systemd .
Als wir den Artikel über das Erstellen einer Seedbox mit Deluge oder die Installation von Tiny Tiny RSS veröffentlichten , wurde in beiden Tutorials ein Dienst erstellt, den wir mit systemd konfiguriert haben. Aus diesem Grund ist es wichtig, die Grundlagen zu kennen, um unsere eigenen Services zu erstellen und diese korrekt zu konfigurieren .
Was ist ein Dämon?
Beginnen wir damit, zu erklären, was ein Dämon intuitiv ist, ohne auf technische Details einzugehen, damit alle Benutzer darauf eingehen können. Wir können einen Dämon als einen Prozess definieren, der im Hintergrund abläuft und zur Selbstverwaltung in der Lage ist, ohne dass der Benutzer damit interagieren muss.
In Debian-Betriebssystemen und ihren Derivaten wie Ubuntu haben wir als Dämonenmanager das sogenannte systemd .
So erstellen Sie Dienste in Ubuntu 16.04 mit systemd.
Zunächst müssen wir die Unit-Dateien kennen, mit denen die Dienste konfiguriert werden. Unit-Dateien sind Textdateien, die die verschiedenen Anweisungen enthalten und standardmäßig im Pfad /etc/systemd/system/
.
Grundlagen über Unit-Dateien, was sie sind und wofür sie sind.
Die Namen der Unit-Dateien werden durch unit_name
(Unit-Name) und type_extension
(Erweiterungstyp) definiert . Um dies besser zu verstehen, schlagen wir einen Beispielnamen vor, der midemonio.service
.
Hier unterscheiden wir einerseits midemonio
als unit_name
und andererseits, dass die type_extension
ist.
Als unit_name
wir einen Namen wählen, der uns hilft, den Teufel zu identifizieren, aber als type_extension
wir je nach Funktionalität des Dämons nur aus zwölf Möglichkeiten wählen:
-
.service
-
.target
-
.automount
-
.device
-
.mount
-
.path
-
.scope
-
.slice
-
.snapshot
-
.socket
-
.swap
-
.timer
In diesem Lernprogramm werden wir, da wir beabsichtigen, einen Dienst zu erstellen, nur mit dem Erweiterungstyp .service
.
Zusätzlich können Ordner vorhanden sein, die den Gerätedateien beigefügt sind, um zusätzliche Konfigurationen hinzuzufügen. Wir werden diesen Aspekt in diesem Tutorial nicht behandeln, aber es ist gut, ihn so zu benennen, dass wir wissen, dass diese Möglichkeit besteht. Im Zweifelsfall können Sie jederzeit die zusätzliche Dokumentation der Gerätedateien einsehen (in Englisch) .
Erstellen der Unit-Datei zum Konfigurieren des Dienstes.
Zuerst müssen wir die Unit-Datei mit dem entsprechenden unit_name
und der entsprechenden unit_name
type_extension
erstellen. Ich erstelle die Unit-Datei ejemplo.service
mit den Befehlen:
sudo touch /etc/systemd/system/ejemplo.service
sudo chmod 664 /etc/systemd/system/ejemplo.service
sudo nano /etc/systemd/system/ejemplo.service
Als Inhalt der Unit-Datei pego:
[Unit] Description=servicio de ejemplo After=network.target mysql.service [Service] User=www-data ExecStart=/ruta/script/demonio Restart=on-failure [Install] WantedBy=multi-user.target
Ich denke, der Inhalt der Unit-Datei ist selbsterklärend, aber wir werden trotzdem die verschiedenen Teile und Optionen kommentieren. Wir sehen, dass die Datei in drei Teile unterteilt ist:
-
[Unit]
: In diesem Abschnitt werden die allgemeinen Optionen festgelegt, die nicht von der Art der Erweiterung abhängen. -
[Service]
: In diesem Abschnitt werden die spezifischen Optionen für den ausgewählten Erweiterungstyp aufgeführt. Da es sich in unserem Beispiel umtype_extension
des Typs.service
, heißt dieser Abschnitt[Service]
. Wenn es sich hingegen um einen.socket
Typ handelt, wird dieser Abschnitt mit den übrigen Erweiterungstypen als[Socket]
usw. bezeichnet. -
[Install]
: Enthält Informationen zur Installation des Dienstes, die sich auf die Ausführung dersystemctl disable
systemctl enable
undsystemctl disable
systemctl enable
systemctl disable
die später erläutert werden.
Die wichtigsten Optionen für Unit-Dateien sind:
- Die
After
Direktive, die die Reihenfolge festlegt, in der die verschiedenen Unit-Dateien ausgeführt werden. Es gibt auch dieBefore
Direktive, die das Gegenteil bewirkt. In unserem Fall sehen wir, dassejemplo.service
wird, nachdemmysql.service
undmysql.service
. - Die
User
Direktive legt den Benutzer fest, unter dem das Daemon-Skript ausgeführt wird. Sie können die Gruppe auch mit derGroup
Direktive festlegen. In unserem Fall wird das Dämonenskript unter dem Benutzerwww-data
. - Die
ExecStart
Direktive legt das auszuführende Skript oder den auszuführenden Befehl fest.
Dies ist eine einfache Unit-Datei, die als Beispiel dient. Um jedoch alle verfügbaren Optionen anzuzeigen, besuchen Sie die offizielle Manual-Seite systemd.service (5) (in englischer Sprache) .
Verwalten Sie den mit dem Befehl systemctl erstellten Dienst.
Wir müssen nur den Befehl systemctl
, mit dem wir systemd verwalten können. Da unser Dienst ejemplo.service
bereits erstellt wurde, müssen wir ihn mit dem folgenden Befehl in die Systemstartsequenz einbinden:
sudo systemctl enable ejemplo.service
Wir haben auch den Befehl systemctl disable ejemplo.service
, um den Dienst aus der Startsequenz zu entfernen. Mit dem systemctl daemon-reload
starten systemctl daemon-reload
den systemd-Prozess neu und er wird verwendet, wenn wir einen Dienst hinzufügen oder löschen.
Um den Dienst zu starten, verwenden wir den Befehl:
sudo systemctl start ejemplo.service
Auf die gleiche Weise können wir:
-
sudo systemctl stop ejemplo.service
Sie den Dienst:sudo systemctl stop ejemplo.service
- Starten Sie den Dienst neu:
sudo systemctl restart ejemplo.service
- Erhalten Sie Informationen zum Servicestatus:
sudo systemctl status ejemplo.service
Vergessen wir nicht, dass dieser Leitfaden als kleine Einführung gedacht ist, die als Kontaktperson für die Erstellung von Diensten mit systemd dient, da ein Buch erforderlich wäre, um das Problem eingehender zu behandeln. Ich hoffe, dass es von nun an kein Albtraum mehr ist, mit systemd Dienste in Ubuntu zu erstellen.