Le drop-in Systemd ne parvient pas à créer le fichier PID

11

J'ai un drop-in pour systemd-machined sur le chemin /etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.conf. quand je cours systemctl status systemd-machinedje vois les lignes

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

Cependant, je ne vois pas de fichier PID dans / var / run /. Lequel en fonction de mon drop-in:

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

Je pense qu'il ne devrait pas y avoir de problème lors de la création de ce fichier PID. Y a-t-il quelque chose qui me manque?

Christian Grabowski
la source

Réponses:

18

Le PIDFile=paramètre ne crée pas de fichier PID. C'est encore au service lui-même de faire, comme il l'a été au cours des 40 dernières années. Cette option indique plutôt à systemd où trouver un fichier PID existant (le cas échéant). Dans la plupart des cas, ce n'est pas nécessaire du tout, car systemd conservera les services dans leurs propres groupes de contrôle et n'a pas besoin d'un fichier PID pour les suivre. Cependant, systemd supprimera un fichier PID à la fermeture du service, si le service ne parvient pas à se nettoyer après lui-même.

De la documentation :

Prend un nom de fichier absolu pointant vers le fichier PID de ce démon. L'utilisation de cette option est recommandée pour les services où Type=est défini sur forking. systemd lira le PID du processus principal du démon après le démarrage du service. systemd n'écrira pas dans le fichier configuré ici, bien qu'il supprime le fichier après la fermeture du service s'il existe toujours.

Michael Hampton
la source
Merci pour la clarification. Dans mon cas, playframework a créé un fichier pid dans le dossier racine du projet, mais arrêter ou tuer ce processus / service n'a pas supprimé le fichier "pid". Je n'ai donc pas pu redémarrer mon service de projet à cause du fichier "pid". L'ajout de cette ligne "PIDFile = / path / to / pid" à mon fichier de service systemd a bien fonctionné. Il a supprimé le fichier pid si le service est arrêté ou tué
Ikrom
10

Malheureusement, systemd ne créera pas de fichier PID pour un service non-forking même si vous spécifiez une PIDFile=ligne dans le fichier d'unité du service. Mais vous pourrez peut-être tricher avec une ExecStartPost=ligne, comme:

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