Как одновременно держать руку на пульсе у нескольких серверов и управляемых свичей? Я решил автоматизировать этот процесс. Вот что вышло.
Линк на сабж
Так выглядит лог
А так выглядит conky
Прежде всего установим conky, в Debian based дистрибутивах (Ubuntu и т.д.) делается это так:
$ sudo apt-get install conky
Теперь нужен конфиг для conky, предлагаю скачать мой
$ wget -P ~ troll-lox.narod.ru/conkyrc.troll
Переименуем свежескачанный файлик
$ mv ~/conkyrc.troll ~/.conkyrc
Теперь качаем сабжевый скрипт
$ wget -P ~ troll-lox.narod.ru/pinger.sh
Редактируем 32-ую строку по своему вкусу
$ nano ~/pinger.sh
Даём скрипту права на исполнение
$ sudo chmod +x ~/pinger.sh
И запускаем conky
$ conky&
Всё, должно получиться как на скриншоте.
Сам скрипт
- #!/bin/bash
- #Версия 0.2pre alfa
- #Скрипт поддерживает четыре ключа: 1) -s режим тишины, 2) -d с результатом
- #показывать текущую дату, 3) -n нормальный режим, 4) -с режим для conky
- opt=$1
- if [[ "$opt" = "" ]]
- then
- opt='-n'
- else
- #Немного индийского кода:)
- echo $opt > /dev/null
- fi
- case $opt in
- -n)
- flag=0
- ;;
- -d)
- flag=1
- ;;
- -s)
- flag=2
- ;;
- -c)
- flag=3
- ;;
- *)
- echo "Введен неправильный ключ..."
- exit 0
- esac
- #Этот кейс можно было бы и опустить, но фильтровать входные данные (извините за тавтологию) на входе это есть хорошо
- i=0
- j=0
- for ip in '77.88.21.8' '217.69.128.42' '216.239.59.104' #'74.125.67.10' #Здесь
- #указываем IP пингуемых хостов
- do
- for rez in $(ping -c 1 $ip | grep % | cut -d ' ' -f6)
- do
- echo $rez > /dev/null
- done
- let "j = j + 1"
- if [[ "$rez" = "0%" ]]
- then
- let "i = i + 1"
- else
- #Ещё чуток индийского кода:)
- let "i = i + 0"
- fi
- done
- case $flag in
- 0)
- if [[ "$i" = "$j" ]]
- then
- echo "Всё пингуется нормально..."
- else
- echo "Что-то пошло не так..."
- fi
- ;;
- 1)
- if [[ "$i" = "$j" ]]
- then
- echo "$(date) Всё пингуется нормально..."
- else
- echo "$(date) Что-то пошло не так..."
- fi
- ;;
- 2)
- if [[ "$i" = "$j" ]]
- then
- #И индийский код напоследок:)
- echo "Всё пингуется нормально..." > /dev/null
- else
- echo "Что-то пошло не так..." > /dev/null
- fi
- ;;
- 3)
- if [[ "$i" = "$j" ]]
- then
- echo "Ok"
- else
- echo "Alarm"
- fi
- ;;
- *)
- echo "Критическая ошибка..."
- exit 0
- esac
* This source code was highlighted with Source Code Highlighter.
Линк на сабж
Кусок /etc/crontab
- */10 * * * * root /путь/до/скрипта/./pinger.sh -d >> /путь/до/логов/pinger.log
* This source code was highlighted with Source Code Highlighter.
Так выглядит лог
Кусок .conkyrc
- ${color lightgrey}Last pinger msg: ${color red} ${execi 2 ~/work/pinger.sh -c}
* This source code was highlighted with Source Code Highlighter.
А так выглядит conky
Подробности для тех, кто в танке
Прежде всего установим conky, в Debian based дистрибутивах (Ubuntu и т.д.) делается это так:
$ sudo apt-get install conky
Теперь нужен конфиг для conky, предлагаю скачать мой
$ wget -P ~ troll-lox.narod.ru/conkyrc.troll
Переименуем свежескачанный файлик
$ mv ~/conkyrc.troll ~/.conkyrc
Теперь качаем сабжевый скрипт
$ wget -P ~ troll-lox.narod.ru/pinger.sh
Редактируем 32-ую строку по своему вкусу
$ nano ~/pinger.sh
Даём скрипту права на исполнение
$ sudo chmod +x ~/pinger.sh
И запускаем conky
$ conky&
Всё, должно получиться как на скриншоте.
P.S. Версия для товарищей в белых перчатках
- #!/bin/bash
- opt=$1
- i=0
- j=0
- for ip in '192.168.0.1' '192.168.0.2' 'habrahabr.ru' #'74.125.67.10'
- do
- for rez in $(ping -c 1 $ip | grep % | cut -d ' ' -f6)
- do
- echo $rez > /dev/null
- done
- let "j = j + 1"
- if [[ "$rez" = "0%" ]]; then
- let "i = i + 1"
- fi
- done
- if [[ "$opt" = "-c" ]]
- then
- if [[ "$i" = "$j" ]]
- then
- echo "Ok"
- else
- echo "Alarm"
- fi
- else
- if [[ "$i" = "$j" ]]
- then
- echo "$(date) Всё пингуется нормально..."
- else
- echo "$(date) Что-то пошло не так..."
- fi
- fi
* This source code was highlighted with Source Code Highlighter.