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.
[4] Comentário enviado por allyson10r em 27/02/2021 - 20:54h
A ideia é bem legal, mas você pode obter o mesmo resultado fazendo um "script.sh", assim:
================================================
#!/bin/sh
while true
do
/bin/meu_programa
echo "Atenção, o programa parou as $(date)"
done
================================================
Depois executa esse script em background
/bin/meu_script.sh &
dá pra por o script dento do init.d e aí o sistema inicia o serviço automaticamente no boot.
[8] Comentário enviado por Carlos_Cunha em 01/03/2021 - 09:14h
[4] Comentário enviado por allyson10r em 27/02/2021 - 20:54h
A ideia é bem legal, mas você pode obter o mesmo resultado fazendo um "script.sh", assim:
================================================
#!/bin/sh
while true
do
/bin/meu_programa
echo "Atenção, o programa parou as $(date)"
done
================================================
Depois executa esse script em background
/bin/meu_script.sh &
dá pra por o script dento do init.d e aí o sistema inicia o serviço automaticamente no boot.
Então, como menciono no texto, vc pode executar isso de diversas formar, e pode criar uma laço para lhe atender melhor, e isso não é problema algum.
Porém como disse, a minha forma faz tudo em uma linha(que era/é a ideia de monstra a praticidade do processo que o SystemaD proporcionou), a sua forma chega no mesmo fim, mas vc viu como aumentou a "complexidade"/processos adicionais/etc, que foi tudo que me fez não usar outras formar.
Mas valeu, por passar a quem esteja vendo essa dica mais uma forma de obter o resultado esperado.