スクリプト · 1 min read · Jan 20, 2026
異なるポートでウェブサーバーをリモート監視するためのシンプルなBashスクリプト
異なるポートでウェブサーバーをリモート監視するためのシンプルなBashスクリプト
異なるポート(ここではsmtp、dns、httpおよびhttpsですが、カスタマイズ可能)でウェブサーバーを監視するためのシンプルなbashスクリプトです。これを行うプログラムは100以上あると思いますが、私は小さなメモリ使用量のものを望んでいました。また、通知は1回だけ受け取りたかったので、通知は私の携帯電話にSMSで送信されます。以前使用していたソフトウェアでは、問題を修正するか監視を停止するまで毎分通知が届いており、非常に煩わしかったです。
ソフトウェアのインストール
mail、dig、およびtelnetをインストールする必要があります。
スクリプト
注意:スクリプトは次のことを行うまで続行しません:
./whatever_you_called_this_script fixこれは、1回だけ通知を受け取るために意図的に行われています…
#!/bin/bash
# リモートウェブサーバーの重要なポートをチェックするスクリプト
# Copyright (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"
#########
###NOTIFICATIONS###
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 #Ok
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 #2回目、以下の通知を送信
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 #Ok
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 #2回目、以下の通知を送信
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 #Ok
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 #2回目、以下の通知を送信
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 #Ok
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 #2回目、以下の通知を送信
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_scriptcrontabに追加する:
crontab -e* * * * * /path/to/whatever_you_called_this_script >/dev/null 2>&1新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。