Get Social

Скрипт для мониторинга доменных имён

Скрипт для мониторинга доменных имён image

Часто перед теми, у кого есть несколько сайтов встаёт задача контролировать, когда подходит срок продления доменного имени. Особенно, если доменные имена обслуживаются разными регистраторами. Так было и в тех компаниях, где я работал: полтора-два десятка доменных имён всегда имелось. Хотелось сделать так, чтобы вовремя узнавать об истечении срока действия домена и вовремя его оплачивать.

Поделюсь скриптом на Bash, который я набросал для этого. По сути – это парсер.
Что он делает, можно понять из комментариев, но всё же опишу немного подробнее:

Итак задача: скрипт, запускается по расписанию; опрашивает домены; отсылает отчёт на email.

[1] Откуда берём данные?

Скрипт использует для своей работы результаты команды whois. Иногда запрос в консоли: “whois какой-то-домен” не даёт ожидаемого результата. Это связано с тем, что команда whois не опрашивает подходящие сервера, которые содержат полную информацию. Поэтому мы можем добавить такие сервера в конфигурационный файл whois.conf

[2] Как это работает?

1. Видим массив из доменных имён, которые нужно проверять (заполнить самому).
2. Дальше – создаётся временный файл, который красиво наполняется парсером
3. Содержимое файла отправляется на почту и файл удаляется.

[3] Исходный код?

Вот он:

#!/bin/bash

## скрипт для мониторинга доменных имён -> проверка срока действия домена
## url: http://rocknroot.pp.ua/blog/skript-dlya-monitoringa-domennyih-imyon.html


# НЕ ЗАБЫТЬ ДОБАВИТЬ В /etc/whois.conf СТРОКИ:
# \.ua$ whois.com.ua
# \.by$ whois.cctld.by
#(если нужно)
# или положить где-нибудь свой whois.conf и указать параметром к команде whois

export LC_ALL=ru_RU.utf8

# массив доменных имён для опроса
ARR_DOMAIN+=(
ya.ru
mail.ru
)

# если нет возможности править whois.conf - тогда можно попробовать вписать в массив bash следующее значение: '-h whois.cctld.by tut.by' (в кавычках)

# создаём файл для временных данных
echo "" > tmp_file_domain_renew

# записывает туда заголовок таблицы 
printf "%-35s\t %-25s\t %-25s\n" "Domain     " "< 50 days" "> 50 days" >> tmp_file_domain_renew
printf "%-35s\t %-25s\t %-25s\n" "---------------" "----------" "----------" >> tmp_file_domain_renew

# парсим информацию о сроке действия домена
for DOMAIN_ in "${ARR_DOMAIN[@]}"
 do
 sleep 0.2
 dateexp_=`whois $DOMAIN_ | \
 egrep -i 'Expiration Date:|paid-till:|OK-UNTIL|Domain Currently Expires:|Record expires on|expires:|Registry Expiry Date:'| \
 head -n 1 | \
 sed 's/\(OK-UNTIL\) \(.\{,8\}\).*/\2/i' | \
 sed 's/.*Currently //' | \
 sed 's/.*Expiration Date:/ExpDate: /' | \
 sed 's/.*Registry Expiry Date:/RegExpDate: /' | \
 sed 's/T[0-9][0-9]\:.*//'| \
 awk '{$1=""; print $0}' | \
 sed 's/^\ //' | \
 sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1\2\3/i'`

#  высчитываем, сколько остаётся дней от текущей даты
dateexp_s=`date -d "${dateexp_}" +"%s"`
datenow_s=`date +"%s"`
diff_s=`expr $dateexp_s - $datenow_s`
diff_d=`expr $diff_s / 3600 / 24`

# заполняем стоблцы таблицы в зависимости от того
# больше или меньше, в данном случае, 50 дней
if [[ $diff_d -ge 50 ]];
then
  printf "%-35s\t %-25s\t %-25s\n" "$DOMAIN_"  "-" "$diff_d" >> tmp_file_domain_renew
else
  printf "%-35s\t %-25s\t %-25s\n" "$DOMAIN_" "$diff_d" "-" >> tmp_file_domain_renew
fi

done

# отсылаем на почту
# mail -s DomainRenewCheck mail@example.com < tmp_file_domain_renew

cat tmp_file_domain_renew

# прибираем за собой
rm tmp_file_domain_renew

[4] Проверка.

Не забываем сделать исполняемым с помощью команды:

chmod +x domain_renew.sh

Результат работы в почте должен быть примерно таким:

Домен                          < 50 дней             > 50 дней            
—————                     ———-                ———-               
ya.ru                               –                         320                      
mail.ru                             16                        –          

[5] Как добавить в планировщик?

Запускаем “crontab -e” в консоли и прописываем пусть к скрипту, время и дни, когда его нужно запускать.
Вот и всё. Теперь немного легче будет отследить, когда истекает срок домена. 🙂