
pingテストを自動化するスクリプトを作成しています。何百ものエンドポイントが互いにpingしていて、pingが停止してスクリプトの実行を停止したくないので、タイムアウトを使用してバックグラウンドでpingを実行します。また、ping統計をファイルに保存したいと思います。まず、次のコマンドを試しました。
timeout 20s ssh hostA "ping -c 30 -I 192.6.2.50 192.6.2.28 " | awk '{print "from 50 to 28 |",$0;}' &
私が得た結果は画面に表示されますが、これは私が期待したものとまったく同じです。
from 50 to 28 | PING 192.6.2.28 (160.6.24.28) from 192.6.2.50 : 56(84) bytes of data.
from 50 to 28 | 64 bytes from 192.6.2.28: icmp_seq=1 ttl=64 time=0.264 ms
from 50 to 28 | 64 bytes from 192.6.2.28: icmp_seq=2 ttl=64 time=0.245 ms
from 50 to 28 | 64 bytes from 192.6.2.28: icmp_seq=3 ttl=64 time=0.220 ms
from 50 to 28 | 64 bytes from 192.6.2.28: icmp_seq=4 ttl=64 time=0.214 ms
from 50 to 28 | 64 bytes from 192.6.2.28: icmp_seq=5 ttl=64 time=0.123 ms
....
Killed by signal 15.
ただし、この出力をファイルに保存しようとすると失敗します。以下は私が使用したコマンドです。
timeout 20s ssh cic-1 "ping -c 30 -I 192.6.2.50 192.6.2.28 " | awk '{print "from 50 to 28",$0;}' | tee -i -a path/timeout_test.txt &
しかし、timeout_test.txtには何もありません。
また、以下のコマンドを試しましたが、コマンドが実行される前にtimeout_test.txtを作成しました。
timeout 20s ssh cic-1 "ping -c 30 -I 192.6.2.50 192.6.2.28 " | awk '{print "from 50 to 28",$0;}' >> path/timeout_test.txt &
しかし、まだ何も得ていません。
答え1
おそらく私の最初の考えは、SSHサーバー/リモートPCでpingコマンドを実行しているので、結果はそのリモートにあるファイルのtee -aコマンドで使用する必要があるということです。ところで、私は1つのシェルラインからすべてを削除/パイプするよりも中間ファイルを使用してからログ結果を処理したいと思います。