Como obter o MAIN PID de um processo com SystemD (e manipulá-lo a seu gosto)
Dica publicada em Linux / Avançado
Como obter o MAIN PID de um processo com SystemD (e manipulá-lo a seu gosto)
Meu caso, precisava garantir que um serviço estivesse sempre UP, indiferente do motivo de sua parada, o SystemD já provê isso em partes, o que "garante" o "respaw" podemos dizer, mas não para casos em que o serviço foi parado pelo próprio SystemD (um usuário parando o processo, por exemplo), nesse caso, agendei via crontab uma tarefa que checa por minuto o MAIN PID do processo XXXX, e com isso toma uma ação.
Há várias formas de fazer isso e inúmeros caminhos, mas com SystemD podemos fazer isso de uma forma rápida, simples e clara, o que faz toda a diferença em utilizar essa forma perante as outras ao meu ver. E para isso, executamos o comando:
systemctl show --property MainPID --value XXXXX
Onde: "XXXXX" é o nome do seu serviço.
Isso irá trazer apenas o MAIN PID (sem precisar cut/awk/sed/ ou varias opções). Dessa forma, eu fiz a linha e adicionei ao crontab:
Ou seja, se meu MAIN PID for igual a 0, o que indica que o serviço está parado, reinicia o serviço XXXX. Você pode fazer uma laço para rodar em loop por segundos ou da forma que achar melhor.
Dica de leituras: https://www.freedesktop.org/software/systemd/man/systemd.service.html
Abraço!
Há várias formas de fazer isso e inúmeros caminhos, mas com SystemD podemos fazer isso de uma forma rápida, simples e clara, o que faz toda a diferença em utilizar essa forma perante as outras ao meu ver. E para isso, executamos o comando:
systemctl show --property MainPID --value XXXXX
Onde: "XXXXX" é o nome do seu serviço.
Isso irá trazer apenas o MAIN PID (sem precisar cut/awk/sed/ ou varias opções). Dessa forma, eu fiz a linha e adicionei ao crontab:
[ $(/bin/systemctl show --property MainPID --value XXXXX ) -eq 0 ] && /usr/bin/systemctl restart XXXXX &> /dev/null
Ou seja, se meu MAIN PID for igual a 0, o que indica que o serviço está parado, reinicia o serviço XXXX. Você pode fazer uma laço para rodar em loop por segundos ou da forma que achar melhor.
Dica de leituras: https://www.freedesktop.org/software/systemd/man/systemd.service.html
Abraço!