The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Скрипт для наглядного ping с ведением лога
Представленный скрипт может:
* Отображать результат пинга
* Отображать время пинга
* Вести лог пингов
* Визуализировать лог пингов
* Подавать звуковой сигнал при отсутствии пинга

Код скрипта  conky.sh:

   #!/bin/bash

   #$1 - name
   #$2 - adress
   #$3 - options (f: format result, n: show name, t: show time, d: show colored dot, s: play sound, l: logging)
   #$4 - width in symbol
   #$5 - fill symbol
   #$6 - sound file
   #$7 - packetsize

   if [ "$7" != "" ]
   then
    tmp=-s' '$7
   fi
   a=$(ping -c 1 $2 -W 1 $tmp)
   if [ "$a" = "" ]
   then
    r='e'
    t=Ꝏ
   fi

   if [[ "$a" =~ [0-9]*% ]]; then tmp=$BASH_REMATCH; fi
   if [ "$tmp" = "0%" ]
   then
    r='y'
    if [[ "$a" =~ time=[0-9.]*.ms ]]; then t=$BASH_REMATCH; fi
    t=${t#time=}
    t=${t% ms}
   elif [ "$tmp" = "100%" ]
   then
    r='n'
    t=Ꝏ
   fi

   vislog=''
   #функция визуализации и ведения лога
   function vis_log
   {
   # Проверка наличия файла.
   if [ ! -f "$2" ]
   then
    #echo "Файл "$2" не найден. Создаем..."
    > $2
   fi
   
   #сколько строк лога нужно визуализировать?
   tmp=''
   if [[ "$3" =~ n ]]; then tmp=$1' '; fi
   if [[ "$3" =~ t ]]; then tmp=$tmp' '$t; fi
   if [[ "$3" =~ d ]]; then tmp=$tmp' '$r; fi
   cnt=${#tmp}
   let cnt=$4-$cnt
   #считать из лога нужное количество строк
   tmp=$(tail -n $cnt $2)
   #парсим считанные строки
   sym=''
   oldsym=''
   for ((i=1; i <= cnt ; i++))
   do
    if [[ "$tmp" =~ [eyn] ]]; then sym=$BASH_REMATCH; fi
    tmp=${tmp#*d}
    if [ "$sym" != "$oldsym" ]
    then
     case "$sym" in
      y) vislog=$vislog'${color green}';;
      n) vislog=$vislog'${color red}';;
      e) vislog=$vislog'${color yellow}';;
     esac
    fi
    oldsym=$sym
    vislog=$vislog$5
   done
   
   #записали новый результат пинга в лог
   echo "$r $t"$(date +%x' % '%X)' d' >> $2

   #типа ротация лога оставляем только последние $4 строк
   tail -n $4 $2 > temp.txt
   rm $2
   mv temp.txt $2
   
   }

   #сыграем звук если надо
   if [[ "$3" =~ s ]]; then
    if [ "$r" != 'y' ]
    then
     play $6 -q &
    fi;
   fi
   
   #окончательное оформление для conky
   res=''
   if [[ "$3" =~ l ]]; then vis_log $1 $2 $3 $4 $5; fi
   if [[ "$3" =~ n ]]; then res=$1' '; fi
   if [[ "$3" =~ f ]]; then res=$res' '$vislog; fi
   if [[ "$3" =~ t ]]; then res=$res'${color} '$t; fi
   r=${r//y/'${color 00ff00}'&#11044;}
   r=${r//n/'${color ff0000}'&#11044;}
   r=${r//e/'${color ffff00}'&#11044;}
   if [[ "$3" =~ d ]]; then res=$res' '$r; fi
   echo $res

В скрипт надо передать 7 параметров:

1- Отображаемое имя того, что пингуем (может не совпадать с адресом и вообще
это просто строка от которой работа скрипта не зависит)

2- Пингуемый адрес (х.х.х.х либо example.com)

3- Флаги настроек:
  f - форматировать вывод (без флага ведения лога бессмысленно)
  n - отображать имя
  t - отображать время пинга (ms)
  d - отображать жирную точку текущего результата
  s - проиграть звук при отсутствии пинга
  l - вести лог

4- Общая ширина строки в символах для форматирования

5- Символ которым будет заполняться пространство для форматированного вывода,
также цветом этого символа будет отображаться лог

6- Имя звукового файла (необязательный параметр нужен для флага s, почему то
путь у меня не работал пришлось файл бросить в домашний каталог)

7- Длинна пакета для пинга (совсем не обязательный параметр, но очень просили)

Пример конфигурации conky:

   {execpi 10 /home/kinsoft/conky_ping5.sh Inet 8.8.8.8 fntdls 32 . drip.ogg}

отображать имя, время пинга, лог, текущий результат; играть звук; вести лог;
форматировать строку и делать ее шириной 32 знака.
 
29.06.2011 , Автор: Kins
Ключи: shell, monitoring, ping / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / Shell / Готовые скрипты

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, sanitar (??), 11:09, 02/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Автор, сделай, пожалуйста, скриншот
     
     
  • 2.5, товарищ (?), 14:28, 04/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    поддерживаю! очень хорошо было бы увидеть на что похож отчёт.
     
     
  • 3.11, pavlinux (ok), 14:51, 10/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Пля, это же скрипт ТОЛЬКО для использования в conky!
     

  • 1.2, Zl0 (ok), 21:47, 02/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    знаю скрипт покороче  mtr называется.
     
     
  • 2.3, Filosof (ok), 23:57, 02/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    не факт, что короче, но доступней - точно.
    однако он требует рутовых прав и не выполняет "из коробки" того, чего надо автору.
    Так что это может и велосипед, но вполне функциональный, и свою нишу имеет.
     
     
  • 3.4, mike_t (?), 13:25, 04/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    ping тоже рутовый
     
     
  • 4.6, Zl0 (ok), 17:58, 05/07/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > ping тоже рутовый

    с каких пор?

     
     
  • 5.8, Andrey Mitrofanov (?), 19:30, 06/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Гуглить ping suid и прочие raw socket-ы и капабилитисы.

    ...ping suid capabilities site:opennet.ru

     
  • 3.9, Paul Khusainov (?), 11:16, 07/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и навесьте на mtr suid-бит.
     

  • 1.7, Александр (??), 19:20, 06/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если /usr/sbin/ping то это не значит, что его тока рут запускать может, а по поводу велосипеда: один кама другой урал, велики то разные, кому что удобнее.
     
  • 1.10, Аноним (-), 19:53, 07/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    grc ping
     
  • 1.12, Michael Shigorin (ok), 15:43, 10/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Рекомендую http://collectd.org -- там и быстрый опрос, и запись в локальный/серверный RRD, и пороги, и визуализация.  И не только ping. :)
     
  • 1.14, Sergii Artele (?), 07:44, 09/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не работает, может где ашиПка закралась. показывает только величину пингаи после него амперсанд, но лог не показывает,
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру