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 に保存し、シンボリック リンクを作成する必要があります)。
じゃねーよ!