スクリプト · 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_script

crontabに追加する:

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

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。