Часто перед теми, у кого есть несколько сайтов встаёт задача контролировать, когда подходит срок продления доменного имени. Особенно, если доменные имена обслуживаются разными регистраторами. Так было и в тех компаниях, где я работал: полтора-два десятка доменных имён всегда имелось. Хотелось сделать так, чтобы вовремя узнавать об истечении срока действия домена и вовремя его оплачивать.
Поделюсь скриптом на 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” в консоли и прописываем пусть к скрипту, время и дни, когда его нужно запускать.
Вот и всё. Теперь немного легче будет отследить, когда истекает срок домена. 🙂