我有大量机器,我需要每隔一小时检查一次可用性。我有近 1000 台机器,它们分为 4-5 个名称系列,后面跟着每个节点的编号。比如从 ab1000 到 ab1200,从 bs3000 到 bs3892,从 zx7800 到 zx8900 等。目前我正在使用一个简单的 ping 脚本,因为我无法在这些节点上保留任何软件进行监控(我没有批准这样做)。因此,在我的代码中,我正在调用一个文件,其中我一一更新所有机器名称(相信我,我每天都需要这样做,因为机器名称经常出现),并想知道我是否可以使用正则表达式来提及机器会让我的生活轻松很多。例如: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)"