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

 


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

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

Acessar site do Itaú (Banco) de qualquer Linux [2016]

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

Como Renomear uma Interface de Rede pelo SystemD

MEGAsync não abre no Deepin 20

Leitura recomendada

Transferência manual de arquivo de zona em um DNS server

Ouvindo CD de áudio no Slackware

Prova LPI no Rio de Janeiro em Novembro

Dual boot Linux Mint 17.2 x Windows 8.1 SL com UEFI descomplicado

Instalando o LAMP no Sabayon

  

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