it-swarm.com.de

Erstellen Sie beim Booten ein Verzeichnis unter / var / run

Ich hatte einen Daemon, der in /var/run für seine PID-Datei mit Schreibberechtigung, die dem Benutzer des Dämons erteilt wurde.

Ich habe festgestellt, dass ich dieses Verzeichnis mit den folgenden Befehlen erstellen kann:

# mkdir /var/run/mydaemon

Dann könnte ich seinen Besitz auf den Benutzer/die Gruppe ändern, unter dem/der ich den Prozess ausführen möchte:

# chown myuser:myuser /var/run/mydaemon

Aber dieses Verzeichnis wäre GEGANGEN, wenn ich einen Neustart durchführe! Wie kann ich dieses Verzeichnis jedes Mal erstellen, wenn die Maschine startet?

44
user24601

Zwei Alternativen zum Erstellen von Verzeichnissen durch systemd. In der Regel ist es am einfachsten, ein RuntimeDirectory in der Unit-Datei Ihres Dienstes zu deklarieren:

RuntimeDirectory=, RuntimeDirectoryMode= Nimmt eine Liste von Verzeichnisnamen auf. Wenn festgelegt, werden ein oder mehrere Verzeichnisse mit den angegebenen Namen unter /run (Für Systemdienste) oder unter $ XDG_RUNTIME_DIR (für Benutzerdienste) beim Starten des Geräts erstellt und beim Stoppen des Geräts entfernt. Die Verzeichnisse haben den in RuntimeDirectoryMode= Angegebenen Zugriffsmodus und gehören dem in User= Und Group= Angegebenen Benutzer und der angegebenen Gruppe. Verwenden Sie diese Option, um ein oder mehrere Laufzeitverzeichnisse des Geräts zu verwalten und deren Lebensdauer an die Daemon-Laufzeit zu binden. Die angegebenen Verzeichnisnamen müssen relativ sein und dürfen kein "/", d. h. muss sich auf einfache Verzeichnisse beziehen, die erstellt oder entfernt werden sollen. Dies ist besonders nützlich für nicht privilegierte Daemons, die aufgrund fehlender Berechtigungen keine Laufzeitverzeichnisse in/run erstellen können, und um sicherzustellen, dass das Laufzeitverzeichnis nach der Verwendung automatisch bereinigt wird.

Oder verwenden Sie für Laufzeitverzeichnisse, die komplexere oder andere Konfigurations- oder Lebensdauergarantien erfordern, tmpfiles.d und lassen Sie Ihr Paket eine Datei /usr/lib/tmpfiles.d/mydaemon.conf Löschen:

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -
63
HBruijn

Ich habe einen Dienst erstellt, der das Verzeichnis beim Start erstellt:

vim /etc/systemd/system/mydaemon-helper.service

Die Inhalte von /etc/systemd/system/mydaemon-helper.service:

[Unit]
Description=MyDaemon Helper Simple Service
After=network.target

[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/mydaemon
ExecStart=/usr/bin/chown myuser:myuser /var/run/mydaemon
Restart=on-abort


[Install]
WantedBy=multi-user.target

Dann habe ich diesen Dienst gestartet:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

Ausgabe:

[[email protected] etc]# systemctl status mydaemon-helper.service
● mydaemon-helper.service - MyDaemon Helper Simple Service
   Loaded: loaded (/etc/systemd/system/mydaemon-helper.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

May 28 20:53:50 alpha systemd[1]: Starting MyDaemon Helper Simple Service...
May 28 20:53:50 alpha systemd[1]: Started MyDaemon Helper Simple Service.

Zuletzt habe ich das System angewiesen, es beim Start zu laden:

systemctl enable mydaemon-helper

5
user24601