オンライン/オフライン状態をログファイルに書き込む

オンライン/オフライン状態をログファイルに書き込む

Linux ホストのオンライン/オフライン状態をローカルのログ ファイルに記録する方法を探しています。

これを使用しようとしましたpingが、タイムアウト/ドロップされたパッケージは記録されず、成功した送信のみが表示されます。 ping -D 8.8.8.8 | awk 'NR>1 { printf strftime("%c", $0) "%s",$2; }' RS=[ FS=]

Mi 14 Okt 2015 13:03:06 CEST 64 bytes from 8.8.8.8: icmp_req=155 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:03:07 CEST 64 bytes from 8.8.8.8: icmp_req=156 ttl=55 time=18.6 ms
Mi 14 Okt 2015 13:03:08 CEST 64 bytes from 8.8.8.8: icmp_req=157 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:05:19 CEST 64 bytes from 8.8.8.8: icmp_req=244 ttl=55 time=18.4 ms
Mi 14 Okt 2015 13:05:20 CEST 64 bytes from 8.8.8.8: icmp_req=245 ttl=55 time=18.4 ms

したがって、オフライン状態を検出するには、リクエスト数を注意深く確認する必要があります。

もっと良い方法をご存知の方、またはそのためのツールをご存知の方はいらっしゃいますか?

前もって感謝します。

答え1

Munin、Nagios など、これを行うツールはすでにたくさんあります。車輪の再作成が必要な理由がわかりませんが、シェル ソリューションが必要な場合は、次の方法があります。

#!/bin/bash

logfile="/var/log/up-or-down.log";
ip_address_for_testing="192.168.1.10";

while [[ true ]]; do
    ping -c 5 $ip_address_for_testing;
    if [[ $? -eq 0 ]]; then
        echo "IP status for ${ip_address_for_testing}: UP" >> $logfile;
    else
        echo "IP status for ${ip_address_for_testing}: DOWN" >> $logfile;
    fi;
    sleep 5;
done;

上記の例では、$ip_address_for_testing で定義されたホストに 5 つの ECHO REQUESTS が送信され、すべてがうまくいけば、$logfile に起動しているか停止しているかが書き込まれます。これをファイルに保存し、chmod で実行権限を与え、起動時に起動したい場合は /etc/rc.local または /etc/rcS.d から呼び出します (2 番目のオプションを選択した場合は、/etc/init.d に保存し、シンボリック リンクを作成する必要があります)。

じゃねーよ!

関連情報