
大量のマシンがあり、それらを cron で 1 時間ごとに可用性をチェックする必要があります。約 1000 台のマシンがあり、各ノードごとに 4 ~ 5 個の名前シリーズとその後に続く番号に分割されています。たとえば、ab1000 から ab1200、bs3000 から bs3892、zx7800 から zx8900 などです。現在、これらのノードに監視用のソフトウェアを配置できないため (そのための承認を得ていないため)、単純な ping スクリプトを使用しています。そのため、コード内で、すべてのマシン名を 1 つずつ更新するファイルを呼び出しています (マシン名は頻繁に変更されるため、毎日実行する必要があります)。また、正規表現を使用してマシンを指定できるかどうかを検討しています。そうすれば、作業が大幅に楽になります。たとえば、ab1*、zx[7-8]* などです。入力ファイルでも同じことを試しましたが、あまり役に立ちませんでした。また、これに関するもう 1 つの問題は、1 台または 2 台のマシンが永久にダウンしている場合があり、そのたびにカウントする必要がないことです。そのため、アラート リストで除外しておく必要があります。
また、マシン名が sz7701、7702、7703 の 3/300 sx がダウンしているためにリストを提供するアラートなど、アラートをより堅牢にできる他の方法があればお知らせください。
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
コマンドはすでに終了ステータスを返しているので、それを使用できます。また、各エコーごとにリダイレクトする必要はなく、ループごとに 1 回で十分です。これには、ファイルが初期化され、前回の実行からの行が含まれないという追加の利点があります。
for node in $(cat /tmp/node.txt); do
if ! ping -c 3 $node &> /dev/null; then
echo "$node"
fi
done > /tmp/nodedown.txt
統計が必要な場合は、それらをカウントするか、 を使用してwc
2 つのファイル内の行数をカウントすることができます。
echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"