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

Publicado por Carlos APC em 24/02/2021

[ Hits: 2.544 ]

 


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]

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

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

Samba 4 - Desabilitando suporte a impressoras (CUPS)

MEGAsync não abre no Deepin 20

Leitura recomendada

Upgrade de Fedora 17 para Fedora 18

Bloqueando Ultrasurf 9.8 com iptables

Instalar Ubuntu 10.10 de ISO em HD (sem CD ou USB)

Root foi deletado

Melhorando a conexão da internet no 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