The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Скрипт для наглядного ping с ведени..."
Отправлено auto_tips, 02-Июл-11 11:09 
Представленный скрипт может:
* Отображать результат пинга
* Отображать время пинга
* Вести лог пингов
* Визуализировать лог пингов
* Подавать звуковой сигнал при отсутствии пинга

Код скрипта  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}'⬤}
   r=${r//n/'${color ff0000}'⬤}
   r=${r//e/'${color ffff00}'⬤}
   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 знака.


URL:
Обсуждается: http://www.opennet.ru/tips/info/2591.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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