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

 


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

MEGAsync não abre no Deepin 20

Ingressar (join) CentOS 7 em domínio Samba 4 + SSH + sudo

Samba 4 - Corrigindo erro "LDAP error 50 LDAP_INSUFFICIENT_ACCESS_RIGHTS"

Como saber se o seu processador suporta arquitetura 64 bits

Adicionar IP Secundário no CentOS 7

Leitura recomendada

Bloqueando Ultrasurf 9.8 com iptables

Quotas de disco no OpenBSD

Criando sua própria distribuição Linux

Instalando novo HD

[RESOLVIDO] Slackware 13.1.x sob CentOS/KVM não reconhece interface de rede

  

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