私はコンピュータの信頼性をテストしており、ホストがオンラインであることを確認するために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
待機時間を秒単位で指定することもできます。