Простой скрипт на Python для проверки работы сайта

Обновлено Обновлено: Опубликовано Опубликовано:

В данном примере мы будем использовать питон для разработки небольшого скрипта по проверке сайта по его адресу. Вся работа будет выполнена на сервере под управлением Linux. Дополнительно, мы будем выполнять перезапуск веб-сервера nginx, если получим неправильный код ответа.

Подготовка к работе

Мы будем работать с python3. Установим его. Наши команды будут отличаться в зависимости от дистрибутива Linux.

а) для дистрибутивов Deb (Debian, Ubuntu, Mint):

apt install python3 python3-pip

б) для дистрибутивов RPM (Rocky Linux, CentOS):

yum install python3 python3-pip

Установка выполнена.

Также нам нужен будет модуль requests, который можно установить с помощью pip:

pip3 install requests

Наш скрипт мы поместим в отдельный каталог /scripts — создадим его:

mkdir /scripts

Создаем сам скрипт:

vi /scripts/check_site.py

#!/usr/bin/env python3
# -*- encoding: utf-8 -*-

* данные строки служебные — первая указывает на путь, по которому должен запускаться интерпретатор, вторая — на кодировку.

Дадим права на запуск скрипта:

chmod +x /scripts/check_site.py

Мы готовы к созданию скрипта.

Процесс

1. Открываем скрипт и добавляем строки:

vi /scripts/check_site.py

...

import requests

response = requests.get('https://www.dmosk.ru')

print(response.status_code)

* в данном примере мы выполним запрос к сайту dmosk.ru, после чего, отобразим код, который вернет сервер.

Попробуем его запустить:

/scripts/check_site.py

Если сайт работает, то мы должны увидеть код 200:

200

2. Снова открываем скрипт, комментируем или удаляем строку print, добавляем некоторые строки:

vi /scripts/check_site.py

...
import subprocess

...
#print(response.status_code)

if response.status_code != 200:
    subprocess.run(["systemctl", "restart", "nginx"])

* мы подключаем subprocess для отправки системных команд на сервер, далее мы проверяем, какой код вернул сервер, и если это не 200, то выполняем перезапуск nginx.

В продуктивной среде мы должны принять решение, на какой код какую реакцию повесить на наш скрипт. Так как в некоторых случаях сайт может возвращать другой код (например, 301) и это не обязательно, что он не работает. Также, мы можем применить другие действия — отправка уведомления, перезагрузка сервера и так далее. 

3. Подключаем мобильный запросы.

Мы сделали так, что наш скрипт отправлять запрос от браузера на десктопной системе. Но бывает так, что запросы от мобильного устройства обрабатываются по другому. На практике это приводит к тому, что сайт с настольного компьютера открывается, а с мобильного телефона — нет.

И так, открываем наш скрипт:

vi /scripts/check_site.py

Повыше добавим определение переменной с заголовками, а после обычного запроса отправим запрос с мобильного устройства. Также немного модифицируем if:

...

headers_mobile = { 'User-Agent' : 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B137 Safari/601.1'}

response = requests.get('https://www.dmosk.ru')
response_mobile = requests.get('https://www.dmosk.ru', headers=headers_mobile)

if response.status_code != 200 or response_mobile.status_code != 200:
...

* и так, мы определили заголовок, который будет говорить, что запрос идет от мобильного клиента; второй запрос мы делаем с учетом данного заголовка; при проверке мы учитываем код ответа для стандартного запроса и запроса с мобильного устройства.

Наш скрипт готов.

Готовый скрипт полностью

В итоге, в нашем примере мы получили такой скрипт:

#!/usr/bin/env python3
# -*- encoding: utf-8 -*-

import requests
import subprocess

headers_mobile = { 'User-Agent' : 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B137 Safari/601.1'}

response = requests.get('https://www.dmosk.ru')
response_mobile = requests.get('https://www.dmosk.ru', headers=headers_mobile)

if response.status_code != 200 or response_mobile.status_code != 200:
    subprocess.run(["systemctl", "restart", "nginx"])

Автоматическое выполнение

Для выполнения скрипта в автоматическом режиме, добавим задание в cron:

crontab -e

* * * * * /scripts/check_site.py

* в данном примере, выполнение каждую минуту. Подробнее о cron.

Стоит иметь в виду, что, если при проверке сайта сервер будет возвращать неправильный код, наша система будет каждую минуту перезапускать сервер, который может использоваться для других сайтов. Данный пример работы очень грубый — стоит сильно модифицировать скрипт, добавив дополнительные проверки и оповещения, чтобы он не привел к деградации других сайтов и системы.

# Linux # Интернет # Мониторинг
Дмитрий Моск — частный мастер
Был ли вам полезен этот скрипт?

Да            Нет