Linux и Windows: помощь админам и пользователям

Администрируем и настраиваем Windows, Linux.



Простой bash скрипт для мониторнга сервера

Рубрика: Apache
Метки: | | |
Воскресенье, 15 февраля 2009 г.
Просмотров: 3939
Подписаться на комментарии по RSS

В этой заметке я представляю простой bash скрипт для мониторинга вебсервера на различных портах (smtp, dns, http & https , но могут быть легко добавлены другие).  СУществуют более мощные программы мониторинга, однако мне в некоторых условиях хватает и его

Спонсор поста:
Кировский БиоХимЗавод: продам спирт технический. Объемы любые! Недорого

Необходимые компоненты

Вам необходимо иметь установленные mail, dig и telnet.

Скрипт

#!/bin/bash
# Скрипт для провверки доступности портов вашего сервера
# This script is licensed under GNU GPL version 2.0 or above
# ---------------------------------------------------------------------
 
### Этот скрипт проверяет порты 25, 53, 80 и 443 ###
### После двух неудачных проверок будет послано уведомление на email ###
 
###### Эта секция может модифицироваться######
 
WORKDIR="/root"
 
###HTTP###
HTTPSERVERIP="192.168.1.106"
HTTPSERVERPORT="80"
##########
 
###HTTPS###
HTTPSSERVERIP="192.168.1.106"
HTTPSSERVERPORT="443"
##########
 
###MAIL###
SMTPSERVERIP="192.168.1.106"
SMTPSERVERPORT="25"
##########
 
###DNS###
DNSSERVERIP="192.168.1.106"
DOMAINTOCHECKDNS="example.com"
ANSWERIP="192.168.1.106"
#########
 
### Мыло админа###
EMAIL="admin@example.com"
##########
 
############
 
 
###### В эту секцию не нужно вносить изменения#####
### Binaries ###
MAIL=$(which mail)
TELNET=$(which telnet)
DIG=$(which dig)
 
###Change dir###
cd $WORKDIR
 
###Restore when problem fix###
if [ $1 ]; then
  if [ $1=="fix" ]; then
    rm server_problem*.txt
	exit 1;
  fi
fi
 
###Check if already notified###
if [ -f server_problem.txt ]; then
  exit 1;
fi
 
###Проверяем SMTP###
(
echo "quit"
) | $TELNET $SMTPSERVERIP $SMTPSERVERPORT | grep Connected > /dev/null 2>&1
 
if [ "$?" -ne "1" ]; then #Ok
  echo "PORT CONNECTED"
  if [ -f server_problem_first_time_smtp.txt ]; then #remove file if problem fixed
    rm -rf server_problem_first_time_smtp.txt
  fi
else #Connection failure
  if [ -f server_problem_first_time_smtp.txt ]; then #Second time, send notification below
    echo "SMTP PORT NOT CONNECTING" >> server_problem.txt
	rm -rf server_problem_first_time_smtp.txt
  else #First notification
    > server_problem_first_time_smtp.txt
  fi
fi
 
###Проверяем HTTP###
(
echo "quit"
) | $TELNET $HTTPSERVERIP $HTTPSERVERPORT | grep Connected > /dev/null 2>&1
 
if [ "$?" -ne "1" ]; then #Ok
  echo "PORT CONNECTED"
  if [ -f server_problem_first_time_http.txt ]; then #remove file if problem fixed
    rm -rf server_problem_first_time_http.txt
  fi
else #Connection failure
  if [ -f server_problem_first_time_http.txt ]; then #Second time, send notification below
    echo "HTTP PORT NOT CONNECTING" >> server_problem.txt
	rm -rf server_problem_first_time_http.txt
  else #First notification
    > server_problem_first_time_http.txt
  fi
fi
 
###Проверяем HTTPS###
(
echo "quit"
) | $TELNET $HTTPSSERVERIP $HTTPSSERVERPORT | grep Connected > /dev/null 2>&1
 
if [ "$?" -ne "1" ]; then #Ok
  echo "PORT CONNECTED"
  if [ -f server_problem_first_time_https.txt ]; then #remove file if problem fixed
    rm -rf server_problem_first_time_https.txt
  fi
else #Connection failure
  if [ -f server_problem_first_time_https.txt ]; then #Second time, send notification below
    echo "HTTPS PORT NOT CONNECTING" >> server_problem.txt
	rm -rf server_problem_first_time_https.txt
  else #First notification
    > server_problem_first_time_https.txt
  fi
fi
 
 
 
###Проверяем DNS###
$DIG $DOMAINTOCHECKDNS @$DNSSERVERIP | grep $ANSWERIP
 
if [ "$?" -ne "1" ]; then #Ok
  echo "PORT CONNECTED"
  if [ -f server_problem_first_time_dns.txt ]; then #удаляем файл если проблема решена
    rm -rf server_problem_first_time_dns.txt
  fi
else #Connection failure
  if [ -f server_problem_first_time_dns.txt ]; then #Second time, send notification below
    echo "DNS PORT NOT CONNECTING" >> server_problem.txt
	rm -rf server_problem_first_time_dns.txt
  else #First notification
    > server_problem_first_time_dns.txt
  fi
fi
 
###Send mail notification after 2 failed check###
if [ -f server_problem.txt ]; then
  $MAIL -s "Server problem" $EMAIL < /root/server_problem.txt
fi

Делаем скрипт исполняемым:

chmod +x whatever_you_called_this_script

И добавляем его в crontab :

* * * * * /root/check >/dev/null 2>&1

Постовой

Компания "Такелажник" занимается перевозкой спецтехники, предоставляет в аренду спецтехнику, выполняет любые такелажные работы.

]]>twitter.com Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>

Комментариев: 1

  1. 2009-03-02 в 09:06:19 | crazyman2004 (анонимно)

    А почему вместо телнета не использовался ssh?

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

Не регистрировать/аноним

Используйте нормальные имена.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



(обязательно)