Das Systemd-Drop-In kann keine PID-Datei erstellen

11

Ich habe ein Drop-In für systemd-bearbeitet am Pfad /etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.conf. Wenn ich renne, systemctl status systemd-machinedsehe ich die Linien

Drop-In: /etc/systemd/system/systemd-machined.service.d
       └─10-machined-pid-file.conf

Ich sehe jedoch keine PID-Datei in / var / run /. Was basierend auf meinem Drop-In:

[Serivce]
PIDFile=/var/run/machined.pid

Ich glaube, es sollte kein Problem beim Erstellen dieser PID-Datei geben. Fehlt mir etwas?

Christian Grabowski
quelle

Antworten:

18

Die PIDFile=Einstellung nicht schafft eine PID - Datei. Das liegt immer noch am Service selbst, genau wie in den letzten 40 Jahren. Diese Option teilt systemd vielmehr mit, wo sich eine vorhandene PID-Datei befindet (falls vorhanden). In den meisten Fällen ist dies überhaupt nicht erforderlich, da systemd die Dienste in ihren eigenen Gruppen behält und keine PID-Datei benötigt, um sie zu verfolgen. Systemd löscht jedoch eine PID-Datei, wenn der Dienst beendet wird, wenn der Dienst nach sich selbst nicht bereinigt werden kann.

Aus der Dokumentation :

Nimmt einen absoluten Dateinamen, der auf die PID-Datei dieses Dämons verweist. Die Verwendung dieser Option wird für Dienste empfohlen, auf die Type=eingestellt ist forking. systemd liest nach dem Start des Dienstes die PID des Hauptprozesses des Dämons. systemd schreibt nicht in die hier konfigurierte Datei, entfernt die Datei jedoch nach dem Herunterfahren des Dienstes, falls sie noch vorhanden ist.

Michael Hampton
quelle
Danke für die Klarstellung. In meinem Fall hat playframework eine PID-Datei im Projektstammordner erstellt, aber durch Stoppen oder Beenden dieses Prozesses / Dienstes wurde die "PID" -Datei nicht gelöscht. Daher konnte ich meinen Projektdienst aufgrund der "pid" -Datei nicht neu starten. Das Hinzufügen dieser Zeile "PIDFile = / path / to / pid" zu meiner systemd-Servicedatei hat einwandfrei funktioniert. Es löschte PID-Datei, wenn der Dienst gestoppt oder beendet wurde
Ikrom
10

Leider erstellt systemd keine PID-Datei für einen nicht gegabelten Dienst, selbst wenn Sie eine PIDFile=Zeile in der Einheitendatei des Dienstes angeben . Aber Sie können möglicherweise mit einer ExecStartPost=Zeile betrügen , wie zum Beispiel:

ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'
Mike Gleason
quelle