O drop-in do Systemd falha ao criar arquivo PID


11

Eu tenho um drop-in para systemd-usinado no caminho /etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.conf. quando eu corro systemctl status systemd-machinedeu vejo as linhas

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

No entanto, não vejo um arquivo PID em / var / run /. Que com base no meu drop-in:

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

Eu acredito que não deve haver nenhum problema ao criar esse arquivo PID. Há algo que estou perdendo?

Respostas:


18

A PIDFile=configuração não cria um arquivo PID. Isso ainda depende do serviço em si, o mesmo dos últimos 40 anos. Em vez disso, esta opção informa ao systemd onde encontrar um arquivo PID existente (se houver). Na maioria dos casos, isso não é necessário, pois o systemd manterá os serviços em seus próprios cgroups e não precisará de um arquivo PID para acompanhá-los. No entanto, o systemd excluirá um arquivo PID quando o serviço sair, se o serviço falhar na limpeza após ele próprio.

A partir da documentação :

Leva um nome de arquivo absoluto apontando para o arquivo PID deste daemon. O uso desta opção é recomendado para serviços em que Type=está definido como forking. O systemd lerá o PID do processo principal do daemon após a inicialização do serviço. O systemd não gravará no arquivo configurado aqui, embora o remova após o encerramento do serviço, se ele ainda existir.


Obrigado pela clarificação. No meu caso, o playframework criou o arquivo pid na pasta raiz do projeto, mas interromper ou interromper esse processo / serviço não excluiu o arquivo "pid". Portanto, não pude reiniciar meu serviço de projeto por causa do arquivo "pid". A adição desta linha "PIDFile = / path / to / pid" ao meu arquivo de serviço systemd funcionou bem. É excluídos arquivo pid se o serviço for interrompido ou mortos
Ikrom

10

Lamentavelmente, o systemd não criará um arquivo PID para um serviço que não seja de bifurcação, mesmo se você especificar uma PIDFile=linha no arquivo de unidade do serviço. Mas você pode trapacear com uma ExecStartPost=linha, como:

ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.