Lesen Sie durch man 5 systemd.unit
und man 5 systemd.target
sagen Sie uns, dass Unit-Dateien verwendet werden, um Ziele sowie alles andere systemd zu definieren. Es gibt keine Dokumentation speziell zum Erstellen eines Ziels , daher ist es schwierig, die Vorgehensweise zu bestimmen, aber es unterscheidet sich nicht allzu sehr vom Erstellen eines Diensts.
Wenn Sie Ihr Ziel erstellen, müssen Sie Symlinks zum target.wants
Verzeichnis aus dem Verzeichnis systemd services erstellen . Dann können Sie Ihr Ziel setzen / booten. Hier ist, wie es in Ihrem Beispiel aussehen könnte.
/etc/systemd/system/foo.target
Dies ist die Einheitendatei des Ziels. Wenn Sie das Beispiel graphical.target verwenden, können Sie daraus ein eigenes Ziel erstellen.
[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
Erläuterungen zu den Optionen auf den Manpages des Systems.
Description
- Beschreibt das Ziel. Du solltest verstehen
Requires
- Harte Abhängigkeiten des Ziels. Sie sollten das Basissystem starten lassen, bevor Sie Ihre eigenen Dienste starten.
Wants
- Weiche Abhängigkeiten. Das Ziel benötigt diese nicht zum Starten.
Conflicts
- Wenn eine Einheit eine Konflikteinstellung auf einer anderen Einheit hat, stoppt das Starten der ersteren die letztere und umgekehrt.
After
- Stiefel nach diesen Diensten
AllowIsolate
- Es liegt ganz bei Ihnen und Ihrer Umgebung. Details finden Sie in der Manpagesystemd.unit(5)
/etc/systemd/system/foo.target.wants/
In diesem Verzeichnis verknüpfen Sie die Dienste, die Sie für Ihr Ziel erstellen / benötigen. Dies entspricht der Wants=
Option in der Unit-Datei. Erstellen Sie dieses Verzeichnis und erstellen Sie dann Symlinks wie folgt; ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service
. Dadurch wird ein Symlink von bar.service im Systemverzeichnis zu Ihrem Verzeichnis foo.target.wants erstellt.
Ich denke, das Erstellen einer Unit-Datei für einen Service gehört nicht zum Umfang dieser Antwort, und diese Frage ist definitiv besser dokumentiert. Deshalb lasse ich das jetzt weg. Wenn Sie Ihre Unit-Datei erstellen, verknüpfen Sie sie einfach mit einem Symlink in das Verzeichnis target.wants oder fügen Sie sie der Wants=
Direktive hinzu.
foo.target
demRequires
Feld und demBefore
Feld hinzumulti-user.target
, und es gefälltRequires: base.target foo.target
. Danach starte ich mein Arch Linux vm neu undfoobar.service
laufe automatisch als Daemon.