3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(Linux)pingを継続して実行し結果を日時付けてログに残したい

Linuxを使って、特定の端末へのpingを監視しようと思っています。
(ツール)ネットワーク遅延グラフツールSmokePingを入れてみたで紹介したsmokepingでもいいんですが、あれはどちらかと言うと遅延状態を全体的に見るような感じになります。
細かい情報を取ろうとすると、やはりpingで結果をとりたいものです。

指定間隔で監視対象端末にpingを実行して、その結果を日時付けてログに残すという仕様にしました。 当初cronで考えたんですが、cronだと秒数単位での実行が難しいので、シェルスクリプトを無限ループサせて実行させることとした。

参考にさせてもらったのは、あんみのの備忘録:pingコマンドの結果をログファイルに収集するです。

コンソール上で以下のシェルスクリプトを実行し、止めるときはCtrl+Cで強制終了という形になります。
監視対象端末は3台とします。

#!/bin/sh
#autoping.sh

#監視対象端末のIPを設定
IP1='監視対象IP'
IP2='監視対象IP'
IP3='監視対象IP'

logfile='ping.log'

while :
 do
    #5秒間隔でping実行
    sleep 5
    #日時取得
    daytime="`date +"%b %d %H:%M:%S"` "

    if ping -c 1 $IP1 > /dev/null; then
        #ping応答があった場合
        echo "$daytime  \"$IP1\" alive" >> $logfile
    else
        #ping応答なかった場合
        echo "$daytime PING is NOT UNREACHABLE. \"$IP1\" may NOT BE AVILE." >> $logfile
    fi

    if ping -c 1 $IP2 > /dev/null; then
        echo "$daytime  \"$IP2\" alive" >> $logfile
    else
        echo "$daytime PING is NOT UNREACHABLE. \"$IP2\" may NOT BE AVILE." >> $logfile
    fi

    if ping -c 1 $IP3 > /dev/null; then
        echo "$daytime  \"$IP3\" alive" >> $logfile
    else
        echo "$daytime PING is NOT UNREACHABLE. \"$IP3\" may NOT BE AVILE." >> $logfile
    fi
done

参考:
日付を取得する - UNIX & Linux コマンド・シェルスクリプト リファレンス