ホスト監視のためにこのスクリプトを作成しました。
目標は、ホストをpingして出力をファイルに書き込むと同時に、出力を端末に表示することです。ホストが応答しない場合、時間と対応するエラーメッセージが記録されます。目標は、稼働/中断時間のタイムスタンプを記録することです。
#!/bin/bash
DATE=$(date +"%d.%m.%Y %T")
SHORT_DATE=$(date +"%d.%m.%Y")
echo
echo "Pinging host " $@
echo
HOST=$@
ping $HOST | while read PONG
do
grep ttl <<< "$PONG"
if [ $? -eq 0 ]; then
echo "`date`: $PONG"
echo "`date`: $PONG" &>> ping_check_$SHORT_DATE.log
else
echo "`date`: ping failed, $HOST host is DOWN!" &>> ping_check_$SHORT_DATE.log
echo "$PONG" &>> ping_check_$SHORT_DATE.log
fi
done
これで問題は、pingが成功したときにスクリプトの出力が次のようになることです(2行の出力が出て、最初の行は必要ありません)。
[spirit@vas scripts]$ ./ping_check3.sh 10.10.0.254
Pinging host 10.10.0.254
64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
Wed Jun 3 10:35:52 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
64 bytes from 10.10.0.254: icmp_seq=2 ttl=255 time=1.28 ms
Wed Jun 3 10:35:53 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=2 ttl=255 time=1.28 ms
64 bytes from 10.10.0.254: icmp_seq=3 ttl=255 time=1.34 ms
上記の出力は端末からのものです。ping $HOST
最初の行ではなくタイムスタンプを持つ結果だけが必要ですか? :
Wed Jun 3 10:35:52 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
タイムスタンプのある行だけが出力に表示されるようにスクリプトを変更するにはどうすればよいですか?
編集する:
もう一度確認するには:
ログファイルの出力は次のとおりです。
Wed Jun 3 10:35:52 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=1 ttl=255 time=1.18 ms
Wed Jun 3 10:35:53 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=2 ttl=255 time=1.28 ms
Wed Jun 3 10:35:54 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=3 ttl=255 time=1.34 ms
Wed Jun 3 10:35:55 CEST 2015: 64 bytes from 10.10.0.254: icmp_seq=4 ttl=255 time=1.58 ms
答え1
ただ編集してください:
grep ttl <<< "$PONG"
到着する:
grep -q ttl <<< "$PONG"
あなたが得る出力はフラグをgrep
使用すると静かです。-q
grep