Скрипты · 2 min read · Jan 20, 2026

Простой Bash-скрипт для удаленного мониторинга вашего веб-сервера на разных портах

Простой Bash-скрипт для удаленного мониторинга вашего веб-сервера на разных портах

Простой bash-скрипт для мониторинга веб-сервера на разных портах (здесь smtp, dns, http и https, но его можно настроить); я уверен, что существует более 100 доступных программ, которые делают это, но я хотел что-то с небольшим потреблением памяти. Кроме того, я хотел получать уведомления только один раз, уведомления приходят по SMS на мой мобильный телефон. С программным обеспечением, которое я использовал ранее, я получал уведомления каждую минуту, пока не мог добраться до компьютера и исправить проблему или остановить мониторинг, что было довольно раздражающим.

Установка программного обеспечения

Вам нужно установить mail, dig и telnet.

Скрипт

ПРИМЕЧАНИЕ: Скрипт не продолжится, пока вы не выполните:

./whatever_you_called_this_script fix

Это сделано специально, чтобы получить только ОДНО уведомление…

#!/bin/bash
# Скрипт для проверки важных портов на удаленном веб-сервере
# Авторские права (c) 2009 blogama.org
# Этот скрипт лицензирован под GNU GPL версии 2.0 или выше
# ---------------------------------------------------------------------
 
### Этот скрипт выполняет проверку на портах 25, 53, 80 и 443 ###
### После 2 неудачных проверок он отправит уведомление по электронной почте ###
 
######Подлежит изменению######
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="[email protected]"
##########
######Конец для изменения######
 
######Не вносите изменения ниже######
### Бинарные файлы ###
MAIL=$(which mail)
TELNET=$(which telnet)
DIG=$(which dig)
###Сменить директорию###
cd $WORKDIR
###Восстановить, когда проблема будет исправлена###
if [ $1 ]; then
  if [ $1=="fix" ]; then
    rm server_problem*.txt
    exit 1;
  fi
fi
###Проверить, если уже уведомлено###
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 #ОК
  echo "ПОРТ СОЕДИНЕН"
  if [ -f server_problem_first_time_smtp.txt ]; then #удалить файл, если проблема исправлена
    rm -rf server_problem_first_time_smtp.txt
  fi
else #Ошибка соединения
  if [ -f server_problem_first_time_smtp.txt ]; then #Во второй раз отправить уведомление ниже
    echo "SMTP ПОРТ НЕ СОЕДИНЯЕТСЯ" >> server_problem.txt
    rm -rf server_problem_first_time_smtp.txt
  else #Первое уведомление
    > server_problem_first_time_smtp.txt
  fi
fi
 
###Проверка HTTP###
(
echo "quit"
) | $TELNET $HTTPSERVERIP $HTTPSERVERPORT | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then #ОК
  echo "ПОРТ СОЕДИНЕН"
  if [ -f server_problem_first_time_http.txt ]; then #удалить файл, если проблема исправлена
    rm -rf server_problem_first_time_http.txt
  fi
else #Ошибка соединения
  if [ -f server_problem_first_time_http.txt ]; then #Во второй раз отправить уведомление ниже
    echo "HTTP ПОРТ НЕ СОЕДИНЯЕТСЯ" >> server_problem.txt
    rm -rf server_problem_first_time_http.txt
  else #Первое уведомление
    > server_problem_first_time_http.txt
  fi
fi
 
###Проверка HTTPS###
(
echo "quit"
) | $TELNET $HTTPSSERVERIP $HTTPSSERVERPORT | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then #ОК
  echo "ПОРТ СОЕДИНЕН"
  if [ -f server_problem_first_time_https.txt ]; then #удалить файл, если проблема исправлена
    rm -rf server_problem_first_time_https.txt
  fi
else #Ошибка соединения
  if [ -f server_problem_first_time_https.txt ]; then #Во второй раз отправить уведомление ниже
    echo "HTTPS ПОРТ НЕ СОЕДИНЯЕТСЯ" >> server_problem.txt
    rm -rf server_problem_first_time_https.txt
  else #Первое уведомление
    > server_problem_first_time_https.txt
  fi
fi
 
 
 
###Проверка DNS###
$DIG $DOMAINTOCHECKDNS @$DNSSERVERIP | grep $ANSWERIP
 
if [ "$?" -ne "1" ]; then #ОК
  echo "ПОРТ СОЕДИНЕН"
  if [ -f server_problem_first_time_dns.txt ]; then #удалить файл, если проблема исправлена
    rm -rf server_problem_first_time_dns.txt
  fi
else #Ошибка соединения
  if [ -f server_problem_first_time_dns.txt ]; then #Во второй раз отправить уведомление ниже
    echo "DNS ПОРТ НЕ СОЕДИНЯЕТСЯ" >> server_problem.txt
    rm -rf server_problem_first_time_dns.txt
  else #Первое уведомление
    > server_problem_first_time_dns.txt
  fi
fi
 
###Отправить уведомление по электронной почте после 2 неудачных проверок###
if [ -f server_problem.txt ]; then
  $MAIL -s "Проблема с сервером" $EMAIL < /root/server_problem.txt
fi

Сделайте его исполняемым:

chmod +x whatever_you_called_this_script

Добавьте его в ваш crontab:

crontab -e
* * * * * /path/to/whatever_you_called_this_script >/dev/null 2>&1
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.