Ir para conteúdo
  • Cadastre-se

Reiniciar serviço no linux baseado no load das CPUs


Posts Recomendados

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 protected]
        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

 

Link para o comentário
Compartilhar em outros sites

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 protected]
        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?

Link para o comentário
Compartilhar em outros sites

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?

Link para o comentário
Compartilhar em outros sites

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.

 

Link para o comentário
Compartilhar em outros sites

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. 

 

Link para o comentário
Compartilhar em outros sites

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.

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?