El drop-in de Systemd no puede crear el archivo PID

11

Tengo un drop-in para systemd-machined en el camino /etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.conf. cuando corro systemctl status systemd-machinedveo las líneas

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

Sin embargo, no veo un archivo PID en / var / run /. Que en función de mi visita:

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

Creo que no debería haber ningún problema al crear ese archivo PID. ¿Hay algo que este olvidando?

Christian Grabowski
fuente

Respuestas:

18

La PIDFile=configuración no crea un archivo PID. Eso todavía depende del servicio en sí, como lo ha sido durante los últimos 40 años. Más bien, esta opción le dice a systemd dónde encontrar un archivo PID existente (si lo hay). En la mayoría de los casos, no es obligatorio, ya que systemd mantendrá los servicios en sus propios cgroups y no necesita un archivo PID para realizar un seguimiento de ellos. Sin embargo, systemd eliminará un archivo PID cuando el servicio se cierre, si el servicio no se limpia después de sí mismo.

De la documentación :

Toma un nombre de archivo absoluto que apunta al archivo PID de este demonio. Se recomienda el uso de esta opción para los servicios donde Type=se establece en forking. systemd leerá el PID del proceso principal del demonio después del inicio del servicio. systemd no escribirá en el archivo configurado aquí, aunque eliminará el archivo después de que el servicio se haya cerrado si aún existe.

Michael Hampton
fuente
Gracias por la aclaración. En mi caso, playframework creó un archivo pid en la carpeta raíz del proyecto, pero al detener o eliminar este proceso / servicio no se eliminó el archivo "pid". Así que no pude reiniciar mi servicio de proyecto debido al archivo "pid". Agregar esta línea "PIDFile = / path / to / pid" a mi archivo de servicio systemd funcionó bien. Se suprime el archivo pid si el servicio está detenido o matado
Ikrom
10

Lamentablemente, systemd no creará un archivo PID para un servicio que no se bifurca, incluso si especifica una PIDFile=línea en el archivo de la unidad del servicio. Pero puede hacer trampa con una ExecStartPost=línea, como:

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