Pull to refresh

Небольшой скрипт на bash для пингования хостов

Reading time2 min
Views12K
Как одновременно держать руку на пульсе у нескольких серверов и управляемых свичей? Я решил автоматизировать этот процесс. Вот что вышло.

Сам скрипт


  1. #!/bin/bash
  2. #Версия 0.2pre alfa
  3. #Скрипт поддерживает четыре ключа: 1) -s режим тишины, 2) -d с результатом
  4. #показывать текущую дату, 3) -n нормальный режим, 4) -с режим для conky
  5. opt=$1
  6. if [[ "$opt" = "" ]]
  7. then
  8. opt='-n'
  9. else
  10. #Немного индийского кода:)
  11. echo $opt > /dev/null
  12. fi
  13. case $opt in
  14. -n)
  15. flag=0
  16. ;;
  17. -d)
  18. flag=1
  19. ;;
  20. -s)
  21. flag=2
  22. ;;
  23. -c)
  24. flag=3
  25. ;;
  26. *)
  27. echo "Введен неправильный ключ..."
  28. exit 0
  29. esac
  30. #Этот кейс можно было бы и опустить, но фильтровать входные данные (извините за тавтологию) на входе это есть хорошо
  31. i=0
  32. j=0
  33. for ip in '77.88.21.8' '217.69.128.42' '216.239.59.104' #'74.125.67.10' #Здесь
  34. #указываем IP пингуемых хостов
  35. do
  36. for rez in $(ping -c 1 $ip | grep % | cut -d ' ' -f6)
  37. do
  38. echo $rez > /dev/null
  39. done
  40. let "j = j + 1"
  41. if [[ "$rez" = "0%" ]]
  42. then
  43. let "i = i + 1"
  44. else
  45. #Ещё чуток индийского кода:)
  46. let "i = i + 0"
  47. fi
  48. done
  49. case $flag in
  50. 0)
  51. if [[ "$i" = "$j" ]]
  52. then
  53. echo "Всё пингуется нормально..."
  54. else
  55. echo "Что-то пошло не так..."
  56. fi
  57. ;;
  58. 1)
  59. if [[ "$i" = "$j" ]]
  60. then
  61. echo "$(date) Всё пингуется нормально..."
  62. else
  63. echo "$(date) Что-то пошло не так..."
  64. fi
  65. ;;
  66. 2)
  67. if [[ "$i" = "$j" ]]
  68. then
  69. #И индийский код напоследок:)
  70. echo "Всё пингуется нормально..." > /dev/null
  71. else
  72. echo "Что-то пошло не так..." > /dev/null
  73. fi
  74. ;;
  75. 3)
  76. if [[ "$i" = "$j" ]]
  77. then
  78. echo "Ok"
  79. else
  80. echo "Alarm"
  81. fi
  82. ;;
  83. *)
  84. echo "Критическая ошибка..."
  85. exit 0
  86. esac
* This source code was highlighted with Source Code Highlighter.


Линк на сабж



Кусок /etc/crontab


  1. */10 * * * * root /путь/до/скрипта/./pinger.sh -d >> /путь/до/логов/pinger.log
* This source code was highlighted with Source Code Highlighter.


Так выглядит лог




Кусок .conkyrc



  1. ${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. Версия для товарищей в белых перчатках


  1. #!/bin/bash
  2. opt=$1
  3. i=0
  4. j=0
  5. for ip in '192.168.0.1' '192.168.0.2' 'habrahabr.ru' #'74.125.67.10'
  6. do
  7. for rez in $(ping -c 1 $ip | grep % | cut -d ' ' -f6)
  8. do
  9. echo $rez > /dev/null
  10. done
  11. let "j = j + 1"
  12. if [[ "$rez" = "0%" ]]; then
  13. let "i = i + 1"
  14. fi
  15. done
  16. if [[ "$opt" = "-c" ]]
  17. then
  18. if [[ "$i" = "$j" ]]
  19. then
  20. echo "Ok"
  21. else
  22. echo "Alarm"
  23. fi
  24. else
  25. if [[ "$i" = "$j" ]]
  26. then
  27. echo "$(date) Всё пингуется нормально..."
  28. else
  29. echo "$(date) Что-то пошло не так..."
  30. fi
  31. fi
* This source code was highlighted with Source Code Highlighter.
Tags:
Hubs:
Total votes 11: ↑4 and ↓7-3
Comments14

Articles