The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Мониторинг списка сайтов на 200Ок + '301 -> 200ок?'"
Отправлено nicksonet, 28-Июн-17 17:07 
> Добрый день!
> Необходимо мониторить некий список сайтов на доступность и так, чтобы при 301
> редиректе, проверялось состояние сайта на который идет перенаправление с проверяемого
> URL. Подскажите, пожалуйста:
> 1) Есть ли такая возможность в Zabbix
> 2) как можно реализовать проверку "301 -> 200ок?" скриптом
> Спасибо!

В общем, был такое кейс:
0. нужно распарсить из основного списка sitemap`ов, список действующих.
1. затем, поочередно, проходится по списку действующих сайтмапов и распарсив URLы - рандомно (из каждого сайтмапа) проверить на отсутствие ошибок.
2.При этом, 301 - не считается ошибкой, но необходимо чтобы в итоге (в случаи даже неоднократного редиректа) отдавался статус крайней страницы (я решил что промежуточные статусы не важны)

Вот пример того, что у меня получилось:
---

#!/bin/bash

DATE=$(date +%Y-%m-%d:%H:%M:%S)
LOGFILE='/var/log/errorsitemaps.log'
URLLIST='/tmp/urlist.txt'
XMLLIST='/tmp/xmlist.txt'

XMLSOURCE='/путь/до/вашего/основного/sitemap.xml'
    cat $XMLSOURCE | tr '><' '\n' | grep -P '^http' > $XMLLIST

#выше приведенный сайтмап, отдает в свою очередь урлы по которым доступны активные сайтмапы.
#Чтобы не грузить nginx курлом, ниже я заменяю https://example.com/sitemap на локальный путь /var/www/project/sitemap. Изящней было бы использовать "tr"
    sed -i "s/https\:\/\/example\.com\//\/var\/www\/project\/sitemap\//g" $XMLLIST

for line in $(cat $XMLLIST); do

        cat $line | tr '><' '\n' | grep -P '^http' > $URLLIST
        RANGE=$(wc -l $URLLIST | awk '{print $1}')
        number=$RANDOM
        let "number %= $RANGE"
        PAGE=$(sed -n "${number}p" $URLLIST)

        #как и писал выше: "301 - не считается ошибкой, но необходимо чтобы в итоге,
        #в случаи редиректа, отдавался статус крайней страницы (я решил, что промежуточные статусы не важны)"

        MARK=$(curl -I --connect-timeout 5 --location $PAGE | grep -P '^HTTP' | awk '{print $2}' | tr -d '\n')

        case $MARK in
            200)
            echo "$DATE $PAGE $MARK" >> $LOGFILE
            ;;
            *)
            echo "error $MARK from URL $PAGE"  | mail -s "$MARK $DATE" recipient@example.com & echo "$DATE $PAGE $MARK" >> $LOGFILE
            ;;
        esac

done

---

Ну и далее - в крон.


Может кому пригодится. Изящность скрипту придавайте самостоятельно.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру