Bash-скрипт для перезагрузки веб-сервера

Bash-скрипт для перезагрузки веб-сервера

Понадобилось автоматизировать перезагрузку VPS, на котором хостился сайт на самописной CMS. Особенность сайта заключалась в том, что он падал с ошибкой 500 Internal Server Error во время интенсивного краулинга поисковыми роботами. Поскольку CMS была очень нетипичной, проще было перезагружать сервер, чем вникать в суть проблемы и искать способы исправления.

Для этого был написан bash-скрипт следующего содержания:

#!/bin/bash
url='https://site.ru'
read -ra result $(curl -Is --connect-timeout 5 "${url}" || echo "timeout 500")
status=${result[1]}
touch /полный/путь/к/папке/public_html/log.txt
if [ $status -ge 400 ];
then
date /полный/путь/к/папке/public_html/log.txt
sudo reboot
fi
exit;

Логика его работы:

  1. Запрашиваем главную страницу сайта site.ru
  2. Проверяем код состояния HTTP
  3. Если получен HTTP-статус ≥400, то записываем факт события в лог-файл и перезагружаем сервер

Скрипт нужно сохранить в файл с расширением .sh, а затем сделать исполняемым:

chmod a+x reboot.sh

Проверяем запуск:

./reboot.sh

Если скрипт выдает ошибку, то пересохраняем его в правильной кодировке при помощи утилиты dos2unix:

apt install dos2unix
dos2unix reboot.sh

Настраиваем автоматическое выполнение скрипта раз в минуту:

crontab -e

В открывшийся файл вписываем новую строку:

*/1 * * * * /полный/путь/к/reboot.sh

Сохраняем файл. Проверяем, что изменения внесены:

crontab -l

Готово. Теперь при получении кода ответа 500, 502, 504 сервер будет автоматически перезагружаться, а время простоя будет составлять не более одной минуты.

Вместо перезагрузки сервера можно также выполнять команду перезапуска nginx или Apache.

Последнее обновление статьи: 29 декабря 2019 года

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *