
我有大量機器,我需要每隔一小時檢查可用性。我有近 1000 台機器,它們分為 4-5 個名稱系列,後面跟著每個節點的編號。例如從 ab1000 到 ab1200,從 bs3000 到 bs3892,從 zx7800 到 zx8900 等。因此,在我的程式碼中,我正在調用一個文件,其中我一一更新所有機器名稱(相信我,我每天都需要這樣做,因為機器名稱經常出現),並想知道是否可以使用正則表達式來提及機器會讓我的生活輕鬆很多。例如:ab1*,zx[7-8]* 等。還有一個問題是,有時一兩台機器永久關閉,我不需要每次都數。所以我需要將其保留在我的警報清單中。
另外,請告訴我是否還有其他任何事情可以使警報更加強大,例如警報給出列表,因為 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
如果您想要統計數據,您可以對它們進行計數,或用於對wc
兩個文件中的行進行計數。
echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"