Представленный скрипт может:
* Отображать результат пинга
* Отображать время пинга
* Вести лог пингов
* Визуализировать лог пингов
* Подавать звуковой сигнал при отсутствии пингаКод скрипта 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:
Обсуждается: https://www.opennet.ru/tips/info/2591.shtml