私は多数のコンピュータを持っており、毎時間利用可能性を確認する必要があります。私は1000台に近いコンピュータを持っており、4-5個の名前シリーズと各ノードの番号に分かれています。たとえば、ab1000からab1200、bs3000からbs3892、zx7800からzx8900などです。現在、私は監視のためにこのノードにソフトウェアをアーカイブできないため、単純なpingスクリプトを使用しています(これを行う権限がありません)。だから私のコードでは、私はすべてのコンピュータ名を1つずつ更新するファイルを呼び出しています。 (コンピュータ名が頻繁に表示されるため、毎日これを行う必要があります。)正規表現を使用できるかどうか疑問に思います。私の人生をはるかに簡単にしてください。例: ab1*、zx[7-8]* など、入力ファイルで同じ内容を試してみましたが、あまり役に立ちませんでした。もう1つの問題は、時々1つまたは2台のコンピュータが永久にダウンし、毎回その数を数える必要がないということです。だから私はそれを私の警告リストに保管する必要があります。
また、3/300 sx がダウンしてコンピュータ名が sz7701,7702,7703 なので、アラートがリストを提供するようにアラートをより強力にするために実行できる他の操作があるかどうかを教えてください。
cat /tmp/node.txt
zx7800
zx7801
zx7802
.....
....
zx8900
bs3000
bs3001
cat nodecheck.sh
for node in `cat /tmp/node.txt`
do
count=0
count=$(ping -c 3 $node | grep "100%packet loss"|wc -l)
if [ $count -ne 0 ]
then
echo "$node" >> /tmp/nodedown.txt
fi
done
答え1
監視する名前のリストが必要です。このリストを手動で維持するか、他の人が実行する必要があるコンピュータのリストを維持する場所からインポートできます。
作業を簡素化できます。このping
コマンドはすでに終了ステータスを返すため、これを使用できます。また、すべてのエコーに対してリダイレクトする必要はなく、ループごとに一度だけで十分です。これのもう一つの利点は、ファイルが初期化され、最後の実行の行が含まれないことです。
for node in $(cat /tmp/node.txt); do
if ! ping -c 3 $node &> /dev/null; then
echo "$node"
fi
done > /tmp/nodedown.txt
統計が必要な場合は、統計を計算したり、2つのファイルwc
の行数を計算したりできます。
echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"