Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Postado

Olá Pessoal, 

Alguma alma aqui sabe como reiniciar um ou mais serviços específicos baseado no consumo atual de CPU na máquina? Seria no Linux.

 

É um projetinho aqui bem específico, que seria necessário realizar algo nesse sentido.


Postado

Vittor,

Segue abaixo um script que faz isso, você define o load que deseja e, quando ele ocorrer, o script roda determinados comandos definidos por você. Você pode subir ele em segundo plano com o "&" ou rodar por tarefa agendada, vai depender da sua necessidade.

Abraço, Bruno.

#!/bin/bash
#The minimum load average at 1 minute to trigger an event
LIMIT="20"
#run counter, is only used to see that the script is still running.
RUNCOUNT="0"
#enter an infinite loop
while true
do
#echo "Run count: $RUNCOUNT"
RUNCOUNT=$[$RUNCOUNT + 1]
#Get the current 1 min average load
LOAD1MIN="$(uptime | awk -F "load average:" '{ print $2 }' | cut -d, -f1 | sed 's/ //g')"
#set true or false, if the load is above the limit specified at the top of the script
RESULT=$(echo "$LOAD1MIN > $LIMIT" | bc)
#If the load is above the trigger limit, then break free of the loop to end the script
if [ "$RESULT" == "1" ]; then
        echo "Load is above $LIMIT!"
        #Add the commands here that you want to execute when the 1min average load is above $LIMIT. One command per line
        #break out of the loop
        #You can remove this break, if you want the script to re-run automatically even when the load has been above $LIMIT.
        #in my case, i needed it to stop once the load was above $LIMIT so i added this break.
	service mysql stop
        echo `uptime` | mail -s "ALERT - Load HIGH `hostname`" email@email.com
        break
else
        echo "Load not above $LIMIT"
fi
#sleep for 1 second
sleep 1
#clear the screen to make it all pretty
clear
#End of loop, if this it hit, then return to top of loop and start over
done
#exit the script, since the load was above $LIMIT we don't need to run it anymore
exit 0

 

Postado
Em 20/06/2022 em 18:55, bdlc disse:

Vittor,

Segue abaixo um script que faz isso, você define o load que deseja e, quando ele ocorrer, o script roda determinados comandos definidos por você. Você pode subir ele em segundo plano com o "&" ou rodar por tarefa agendada, vai depender da sua necessidade.

Abraço, Bruno.

#!/bin/bash
#The minimum load average at 1 minute to trigger an event
LIMIT="20"
#run counter, is only used to see that the script is still running.
RUNCOUNT="0"
#enter an infinite loop
while true
do
#echo "Run count: $RUNCOUNT"
RUNCOUNT=$[$RUNCOUNT + 1]
#Get the current 1 min average load
LOAD1MIN="$(uptime | awk -F "load average:" '{ print $2 }' | cut -d, -f1 | sed 's/ //g')"
#set true or false, if the load is above the limit specified at the top of the script
RESULT=$(echo "$LOAD1MIN > $LIMIT" | bc)
#If the load is above the trigger limit, then break free of the loop to end the script
if [ "$RESULT" == "1" ]; then
        echo "Load is above $LIMIT!"
        #Add the commands here that you want to execute when the 1min average load is above $LIMIT. One command per line
        #break out of the loop
        #You can remove this break, if you want the script to re-run automatically even when the load has been above $LIMIT.
        #in my case, i needed it to stop once the load was above $LIMIT so i added this break.
	service mysql stop
        echo `uptime` | mail -s "ALERT - Load HIGH `hostname`" email@email.com
        break
else
        echo "Load not above $LIMIT"
fi
#sleep for 1 second
sleep 1
#clear the screen to make it all pretty
clear
#End of loop, if this it hit, then return to top of loop and start over
done
#exit the script, since the load was above $LIMIT we don't need to run it anymore
exit 0

 

Onde coloca este script? tem que criar um cron?

Postado

brunoalves,

Você pode criar uma tarefa agendada com ele ou deixar ele rodando em segundo plano, para ser acionado assim que a condição do load for atingida.

Abraço, Bruno.

 

Postado
Em 14/07/2022 em 14:57, bdlc disse:

brunoalves,

Você pode criar uma tarefa agendada com ele ou deixar ele rodando em segundo plano, para ser acionado assim que a condição do load for atingida.

Abraço, Bruno.

 

Entao e so pegar este script, colocar a porcentagem de load e modificar o comando que desejo executar e depois rodar ele? ele vai ficar rodando em loop sem necessidade de cron?

 

exemplo, pego este script, subo para o servidor e executo: ./meuscript.sh , mesmo apos ele reiniciar o serviço ele vai ficar em loop?

Postado
Em 17/07/2022 em 08:53, brunoalves disse:

Entao e so pegar este script, colocar a porcentagem de load e modificar o comando que desejo executar e depois rodar ele? ele vai ficar rodando em loop sem necessidade de cron?

 

exemplo, pego este script, subo para o servidor e executo: ./meuscript.sh , mesmo apos ele reiniciar o serviço ele vai ficar em loop?

Olá,

Da forma que está ele para de executar quando atinge a condição (load). Se quiser que ele continue executando, o que não faz muito sentido, basta remover a linha com o comando "break".

Para deixar ele executando em segundo plano, execute:

./meuscripts.sh &

Não sei exatamente o que você deseja fazer com o script, mas colocar ele numa tarefa cron garante a sua execução a cada X minutos. Se subir o processo para segundo plano e por algum motivo ele cair, terá que subir manualmente novamente.

Abraço, Bruno.

 

Postado
2 minutos atrás, bdlc disse:

Olá,

Da forma que está ele para de executar quando atinge a condição (load). Se quiser que ele continue executando, o que não faz muito sentido, basta remover a linha com o comando "break".

Para deixar ele executando em segundo plano, execute:

./meuscripts.sh &

Não sei exatamente o que você deseja fazer com o script, mas colocar ele numa tarefa cron garante a sua execução a cada X minutos. Se subir o processo para segundo plano e por algum motivo ele cair, terá que subir manualmente novamente.

Abraço, Bruno.

 

Veja, eu tenho um sistema que vez ou outra (nao tem tempo certo, mas mais ou menos a cada 7 dias) entre as 10h e 11h da manhã o load do servidor chega a acima de 70% e este serviço para de funcionar, porem quando eu dou um restart ele funciona normalmente com load baixo por varios dias.

Entao precisava que o script ao ver o load acima dos 70% restartar o serviço , e que esta checagem fosse feita a cada 1 ou 5 minutos de forma continua. 

 

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.
Nota: Sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Infelizmente, seu conteúdo contém termos que não são permitimos. Edite seu conteúdo para remover as palavras destacadas abaixo.
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Concorda com os nossos termos?

-