auto reinicia o Apache quando a média de carga é alta

1

Meu servidor sempre é desligado quando atinge uma média de carga alta. Eu otimizei meu Apache, MySQL. Mas eu não posso evitar algum tempo em um tráfego pesado. Então eu tento escrever algum shell para controlar a média de carga.

#!/bin/bash
check='uptime | sed 's/\./ /' | awk '{print $10}''
if[$check -gt 5]
then
  /usr/bin/systemctl restart httpd.service
fi

mas reportar erro quando desculpou o script

/var/www/html/load_average.sh: line 3: if[0.98, -gt 5]: command not found
/var/www/html/load_average.sh: line 4: syntax error near unexpected token 'then'
/var/www/html/load_average.sh: line 4: 'then'

Alguém pode me ajudar?

Outra questão, como executar o script a cada 10 segundos com o cronjob?

outro código de trabalho, compartilhe com todos:

#!/bin/bash
check=$(uptime | tr -d ',' | awk '{print $10}')
if [[ $check > 5 ]]; then
  /usr/bin/systemctl restart httpd.service
fi

na parte do cronjob

* * * * * /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 10; /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 20; /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 30; /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 40; /var/www/html/load_average.sh >/dev/null 2>&1
* * * * * sleep 50; /var/www/html/load_average.sh >/dev/null 2>&1

espero que seja útil para as pessoas que precisam.

    
por space and time 13.02.2015 / 21:26

1 resposta

2

Você deve separar os colchetes dos dados com espaços, como este:

for I in 0 1 2 3 4 5; do
    check=$(uptime | tr -d ',.' | awk '{print $10}')
    if [ "$check" -gt 5 ]; then
        /usr/bin/systemctl restart httpd.service
    fi
    sleep 10
done

No UNIX, [é realmente um comando shell . Quando o shell substitui a variável $ check pelo seu valor, ele tentará encontrar o comando result, daí o erro. Além disso, sugiro que você cite a variável $ check, como se ela fosse substituída por uma string vazia ou um espaço em branco, seria por um erro de sintaxe.

Em relação à sua questão do crontab, execute crontab -e e adicione uma entrada como essa no seu arquivo:

* * * * * /PATH/TO/YOUR/SCRIPT

O tempo decorrido de resolução mínima de Cronjobs é de 1 minuto, portanto, você terá que usar um loop para repassar o cheque 6 vezes a cada dez segundos.

    
por 13.02.2015 / 21:37