Image

База знаний → Настройка crontab скрипта во избежание высокой нагрузки

[Виртуальные сервера]
Дата публикации: 27.01.2023

Когда ни одна из служб защиты не смогла отразить атаку или сервер начал работать под высокой нагрузкой по другой причине. Мы предлагаем установить скрипт и запускать его каждую минуту через службу crontab. Это позволит не потерять доступ к серверу при критичной нагрузке и принять меры по устранению данной ситуации.

/etc/cron.daily/load-average-2.sh

#!/bin/bash

loadavg=`uptime | awk '{print $10+0}'`
# bash doesn't understand floating point
# so convert the number to an interger
thisloadavg=`echo $loadavg|awk -F \. '{print $1}'`
if [ "$thisloadavg" -ge "2" ]; then
echo "Busy - Load Average $loadavg ($thisloadavg) "
echo 'Warning - Load AVG (my.server.tld) on:' `date` `uptime` | mailx -s "Warning: LA from `uptime | cut -d'(' -f2 | cut -d')' -f1`" -S smtp=smtp://mail.server.tld -S smtp-auth=login -S smtp-auth user=user@domain.tld -S smtp-auth-password=PassW0rd -S from="LLC COMPANY" to@domain.tld

else
echo "Okay - Load Average $loadavg ($thisloadavg) "
fi

Данный скрипт необходимо сохранить в файл load-average-2.sh в папке /etc/cron.daily задать права на выполнение.

Потом нужно добавить через команду crontab -e строку, чтобы выполнять его каждые 2 минуты:

*/2 * * * * /etc/cron.daily/load-average-2.sh >> /dev/null 2>&1

Значения необходимо заменить на свои:

  • my.server.tld - имя сервера, на который Вы устанавливаете скрипт.
  • mail.server.tld - имя домена почтового сервера, через который скрипт будет отправлять Вам уведомления.
  • user@domain.tld - имя почтового ящика для подключения к серверу почты (логин).
  • PassW0rd - пароль для почтового аккаунта.
  • LLC COMPANY - имя и адрес от кого будет отправлено письмо.
  • to@domain.tld - почтовый адрес куда будет отправлено уведомление.

В случае если нагрузка (load average) будет превышать 2 т.е. 200% (2 ядра), скрипт вышлет уведомление. Данный параметр выделен, его можно поменять на свой в зависимости от количества ядер у сервера. К примеру если у Вас 4 ядра, то максимальная нагрузка будет 4, т.е. 400%.

При необходимости Вы можете добавить в скрипт команды, которые необходимо выполнять, например перезапуск служб с целью сброса нагрузки. Добавить их необходимо перед else, например:

service nginx restart
service ddos restart
service httpd restart




Нет комментариев