Скрипты · 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>&1Get new posts in your inbox
No spam. Unsubscribe anytime.