Como obter o MAIN PID de um processo com SystemD (e manipulá-lo a seu gosto)

Publicado por Carlos A. P. Cunha em 24/02/2021

[ Hits: 1.661 ]

 


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:

[ $(/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!

Outras dicas deste autor

Guardião Itaú Linux 2014

Aplicando "Configurações" de SSH para usuário/grupo ou ip/rede específicos

Java Oracle + Plugin Firefox no Antergos (Arch Linux)

Failed to enable unit: Refusing to operate on alias name or linked unit file: bind9.service [RESOLVIDO]

VSFTPD - Criando diretório de usuário automaticamente

Leitura recomendada

Slackware64-current (boot on zfs / root on zfs)

Imprimindo em uma HP Laserjet 3030 conectada a um Jetdirect através linha de comando

Failed to enable unit: Refusing to operate on alias name or linked unit file: bind9.service [RESOLVIDO]

oVirt no Centos 7

Libs C realmente alternativos

  

Comentários
[1] Comentário enviado por fabio em 24/02/2021 - 17:47h

Gostei disso hein! Favoritado.

[2] Comentário enviado por -josinaldo- em 24/02/2021 - 22:08h

Muito boa dica, jovem.

[3] Comentário enviado por maurixnovatrento em 24/02/2021 - 22:51h


Bacana.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[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.

[5] Comentário enviado por Carlos_Cunha em 01/03/2021 - 09:09h


[1] Comentário enviado por fabio em 24/02/2021 - 17:47h

Gostei disso hein! Favoritado.


Valeu :-D

[6] Comentário enviado por Carlos_Cunha em 01/03/2021 - 09:09h


[2] Comentário enviado por -josinaldo- em 24/02/2021 - 22:08h

Muito boa dica, jovem.


Valeu :-D

[7] Comentário enviado por Carlos_Cunha em 01/03/2021 - 09:09h


[3] Comentário enviado por mauricio123 em 24/02/2021 - 22:51h


Bacana.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]


Valeu :-D

[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.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts