Intereting Posts
Изменение пароля через linux PAM без запуска приложения как root ifconfig ethernet (eth0) нет потока данных проблема с носками в proxychains Как получить электронную почту с помощью Exim4? Xvfb с 2 экранами и двумя серверами x11vnc (по одному для каждого экрана): только первая работает Как взять sha-1, sha-256 или MD5 из CD / DVD? Где идут сообщения об ошибках X? Можно ли накладывать цветные тексты поверх консоли linux, как на этом изображении? Подключение к хосту с помощью SSH-клиента в Linux через прокси-сервер Установите OpenSUSE 12.3 на виртуальную машину AWK: Как поместить поле ($ 1) внутри регулярного выражения, чтобы выбрать все префиксы? Машина зависает, когда она попадает под место подкачки под большой нагрузкой Пользователь может sudo, хотя он не в группе sudo, а в / etc / sudoers Использование двоичных данных в качестве параметра в bash – любой способ разрешить nuls? Изменение размера LVM в начале

проверьте обновление ping для большого количества машин

Я получил большое количество машин, которые мне нужно проверять, чтобы проверить доступность через каждый час. Я получил почти 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 

Вам нужен список имен, которые вы хотите контролировать. Либо вы ведете этот список вручную, либо извлекаете список, из которого кто-то другой ведет список машин, которые должны работать.

Вы можете упростить несколько вещей. Команда ping уже возвращает статус выхода, вы можете использовать его. Также вам не нужно redirect для каждого эха, достаточно одного цикла. Это дает дополнительное преимущество: файл инициализируется и не содержит строк из последнего запуска.

 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)" 

Альтернативы:

  • fping похож на ping, но явно предназначен для проверки связи с несколькими хостами.
  • whatsup – это утилита, предназначенная для мониторинга работы компьютеров.

Может быть, заявление о ситуации:

 #!/bin/sh glob=${1:-*} for node in `cat /tmp/node.txt` do case $node in $glob) : ;; *) continue ;; esac 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 

Назовите это как:

 nodecheck.sh 'bs381*' 

Убедитесь, что вы указали регулярное выражение, чтобы shell не расширила его.