ホストがオンラインであることを確認する

ホストがオンラインであることを確認する

私はコンピュータの信頼性をテストしており、ホストがオンラインであることを確認するためにBashスクリプトを書く簡単な方法が必要です。このスクリプトをどのように書くべきですか?

if [ ! $(hostisonline) ]; then
    # profit
fi

答え1

ホストがpingに応答すると、オンラインであるかどうかをテストします(単純な例)。

ping -c 10 $host

pingが返されないか禁止されている場合は、nmapを介して個々のサービスを確認してください。

nmap $host -p $known_port --max-retries 10 | grep -q open

たとえば、SSHを開く必要があるかどうかをテストするには、Known_portを22に置き換えます。

スクリプトの場合は、次のようになります(例:日曜日の朝で退屈だったため、一部の編集後は少し大きくなりました。1つではなく複数のホストをテストするように設計されています)。

declare -A SERVER
# SERVER["NAME - Description"]="IP KNOWNPORT"
SERVER["SERVER1 - Client foo"]="111.111.111.111 22"
SERVER["SERVER2 - Client bar"]="222.222.222.222 80"
# ...
# add as many server/port combinations as you'd like

NMAP_MAX_RETRIES=10

printf "========================= ========================= ========== ==========\n"
printf "%25s %25s %10s %10s\n" "Host Description" "IP" "Port" "Status"
printf "========================= ========================= ========== ==========\n"


for server in "${!SERVER[@]}"; do
    set -- ${SERVER["$server"]}
    eval nmap \$1 -p \$2 --max-retries $NMAP_MAX_RETRIES | grep -q open
    if [ "$?" == "0" ]; then
        STATUS="[OK]"
    else
        STATUS="*DOWN*" 
    fi
    printf "%25s %25s %10s %10s\n" "$server" "$1" "$2" "$STATUS" 
done

 printf "========================= ========================= ========== ==========\n"

実行すると、次が返されます(偽のIPなのでサーバーがダウンしています)。

 ~$ bash /tmp/foo.sh
 ========================= ========================= ========== ==========
          Host Description                        IP       Port     Status
 ========================= ========================= ========== ==========
      SERVER2 - Client bar           222.222.222.222         80     *DOWN*
      SERVER1 - Client foo           111.111.111.111         22     *DOWN*
 ========================= ========================= ========== ==========

答え2

簡単な解決策は次のとおりです。

ping -W 1 $ip

ここで-Wタイムアウトを秒単位で指定します。

大文字Wであることを確認してください。-i待機時間を秒単位で指定することもできます。

関連情報