
У меня есть большое количество машин, доступность которых мне нужно проверять cron каждый час, поэтому у меня есть около 1000 машин, которые разделены на 4-5 серий имен, за которыми следует номер для каждого узла. Скажем, от ab1000 до ab1200, от bs3000 до bs3892, от zx7800 до zx8900 и т. д. В настоящее время я использую простой скрипт ping, так как не могу держать на этих узлах никакого программного обеспечения для мониторинга (у меня нет разрешения на это). Поэтому в своем коде я вызываю файл, в котором обновляю все имена машин одно за другим (поверьте мне, мне нужно делать это каждый день, так как имена машин встречаются очень часто), и задаюсь вопросом, могу ли я использовать regex для упоминания машин, так как это сильно облегчит мне жизнь. Скажем, например: 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)"