Qual é a melhor maneira de remover arquivos pid antes de iniciar um serviço?

2

Eu tenho um serviço que nem sempre remove seus arquivos pid ao desligar. Então, quando vai começar de novo, ele falha. Meu sistema é um sistema RHEL 7.2 e o que eu quero fazer é fazer com que o sistema procure o arquivo antes de iniciá-lo e removê-lo, se encontrado. Eu preciso fazer tudo isso com systemctl, ou isso precisa acontecer antes que alguém execute systemctl start <service> . Eu tenho o comando que eu quero usar eu não tenho certeza como integrar isso com systemctl para um processo contínuo. Aqui está o comando:

[ -f /var/run/dir/file.pid ] && echo "Found and removing" && rm -f /var/run/dir/file.pid || echo "Not Found"

É possível colocar isso dentro do arquivo de serviço localizado em / usr / lib / systemd / system /? Se sim, onde eu colocaria? Aqui está o conteúdo do arquivo que ele precisaria entrar. Nós o chamaremos de dns.service.

[Unit]
Description=DNS daemon
BindTo=dns.service
After=syslog.target network.target dns.service
ConditionPathExists=/etc/dns/dns.conf

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/dns
ExecStart=/usr/sbin/dns -u dns -g dns -f   /etc/dns/dns.conf -d -P 17500
Restart=on-abort

[Install]
WantedBy=network.target

Isto parece ser o caminho certo para conseguir isso ou existe uma maneira melhor?

    
por user53029 18.01.2016 / 18:13

1 resposta

2

Os serviços personalizados devem permanecer em /etc/systemd/system .

Como você está fazendo forking , o que eu faria é usar a diretiva PIDFile= . Quando o serviço for interrompido, ele excluirá o arquivo. No entanto, na inicialização, ele não será gravado no arquivo. Cabe ao seu serviço escrever para ele. O local recomendado para gravar é /run .

    
por 18.01.2016 / 18:19