Ir para conteúdo
  • Cadastre-se

Shell script para restart automático do banco de dados.


Posts Recomendados

Pessoal, pegando o bonde andando aqui no portal, peguei um script que reinicia automaticamente um serviço quando o load do servidor atinge uma porcentagem.

Este é o script

 

#!/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 restart
        echo `uptime` | mail -s "ALERT - Load HIGH `hostname`" email@site.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

, ok, o script é simples, eu entro no SSH  e executo ./meuscript.sh e quando o load atinge 20% ele reinicia o mysql, mas o script nao funciona se meu ssh desconectar por exemplo

Queria saber, como executar este script para que ele fique sempre rodando, pensei em agendar um cron, porem acredito que sempre que o cron for executado ele ira deixar um processo deste script ativo. como faço?

Link para o comentário
Compartilhar em outros sites

11 horas atrás, brunoalves disse:

Pessoal, pegando o bonde andando aqui no portal, peguei um script que reinicia automaticamente um serviço quando o load do servidor atinge uma porcentagem.

Este é o script

 

#!/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 restart
        echo `uptime` | mail -s "ALERT - Load HIGH `hostname`" email@site.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

, ok, o script é simples, eu entro no SSH  e executo ./meuscript.sh e quando o load atinge 20% ele reinicia o mysql, mas o script nao funciona se meu ssh desconectar por exemplo

Queria saber, como executar este script para que ele fique sempre rodando, pensei em agendar um cron, porem acredito que sempre que o cron for executado ele ira deixar um processo deste script ativo. como faço?

Olá,
É só fazer sem loop 
 

#!/bin/bash
SHELL=/bin/sh
PATH=/sbin:/usr/sbin:/usr/bin:/bin

loadLimit=20

load=$(awk '{print $1}' /proc/loadavg | cut -d '.' -f1)

if [ "$load" -gt "$loadLimit" ]; 
then
echo "";
service mysql restart
else
echo "";
fi
exit

Ai você coloca no cron pra rodar a cada minuto

*/1 * * * * /bin/load_alto.sh



 

Link para o comentário
Compartilhar em outros sites

Bruno,

É simples, basta adicionar algo do tipo na linha acima do comando de reiniciar:

date >> /[caminho]/mysql_log_reiniciado.txt

Dessa forma a cada execução do comando de reiniciar será inserido no arquivo indicado a data e horário.

Abraço, Bruno.

Editado por bdlc
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?