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.745 ]

 


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

Samba4 Erro no Bind(Named) zone XXX.in-addr.arpa/NONE: has no NS records [RESOLVIDO]

Deepin Linux lentidão na banda 5GHz [RESOLVIDO]

Atualização do Kernel no Ubuntu Server 14.04 LTS

Criptografando Shell Script

[SAMBA 4 ADDC] Listando Nome e Nome Completo de Usuários de um grupo

Leitura recomendada

Prova LPI no Rio em Abril

Prova LPI no Rio de Janeiro em Novembro

Migrar Servidor Samba de Hardware

Sobrevivendo ao Terminal do Xenserver 7

Uso avançado de Gparted - Protegendo seu Linux

  

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