Vittor Postado Junho 18, 2022 Compartilhar Postado Junho 18, 2022 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. 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
edinaldo Postado Junho 18, 2022 Compartilhar Postado Junho 18, 2022 Dá pra fazer um script que roda em cronjob a cada x minutos e uma condicional que ao chegar a x de load executar uma ação. 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
bdlc Postado Junho 20, 2022 Compartilhar Postado Junho 20, 2022 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 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
brunoalves Postado Julho 1, 2022 Compartilhar Postado Julho 1, 2022 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? 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
bdlc Postado Julho 14, 2022 Compartilhar Postado Julho 14, 2022 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. 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
brunoalves Postado Julho 17, 2022 Compartilhar Postado Julho 17, 2022 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? 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
bdlc Postado Julho 19, 2022 Compartilhar Postado Julho 19, 2022 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. 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
brunoalves Postado Julho 19, 2022 Compartilhar Postado Julho 19, 2022 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. 0 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
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.