Il drop-in di Systemd non riesce a creare il file PID


11

Ho un drop-in per systemd-machined sul percorso /etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.conf. quando corro systemctl status systemd-machinedvedo le linee

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

Tuttavia, non vedo un file PID in / var / run /. Quale basato sul mio drop-in:

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

Credo che non ci dovrebbero essere problemi nella creazione di quel file PID. C'è qualcosa che mi manca?

Risposte:


18

L' PIDFile=impostazione non crea un file PID. Questo dipende ancora dal servizio stesso, come è stato negli ultimi 40 anni. Piuttosto, questa opzione indica a systemd dove trovare un file PID esistente (se presente). Nella maggior parte dei casi non è affatto necessario, poiché systemd manterrà i servizi nei propri cgroups e non ha bisogno di un file PID per tenerne traccia. Tuttavia, systemd eliminerà un file PID quando il servizio esce, se il servizio non riesce a ripulire dopo se stesso.

Dalla documentazione :

Prende un nome file assoluto che punta al file PID di questo demone. L'uso di questa opzione è consigliato per i servizi su cui Type=è impostato forking. systemd leggerà il PID del processo principale del daemon dopo l'avvio del servizio. systemd non scriverà sul file configurato qui, sebbene rimuoverà il file dopo l'arresto del servizio se esiste ancora.


Grazie per il chiarimento. Nel mio caso playframework ha creato un file pid nella cartella principale del progetto, ma l'arresto o l'uccisione di questo processo / servizio non ha eliminato il file "pid". Quindi non ho potuto riavviare il mio servizio di progetto a causa del file "pid". L'aggiunta di questa riga "PIDFile = / path / to / pid" al mio file di servizio systemd ha funzionato correttamente. Ha eliminato il file pid se il servizio è stato arrestato o interrotto
Ikrom,

10

Purtroppo, systemd non creerà un file PID per un servizio non di biforcazione anche se si specifica una PIDFile=riga nel file di unità del servizio. Ma potresti essere in grado di imbrogliare con una ExecStartPost=linea, come ad esempio:

ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.