VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Скрипт проверки регистрации транков

Общие вопросы по операционной системе

Модераторы: april22, Zavr2008

Ответить
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Скрипт проверки регистрации транков

Сообщение TVMaker »

Набросал простенький скрипт, проверяющий, не залипла ли регистрация внешних транков и в случае подозрения - оперативно принимающий меры. Вдруг кому пригодится. У меня на домашнем астере вроде трое суток нормально работает.

Код: Выделить всё

#!/bin/bash

LOGFILE="/var/log/asterisk/asterstatus.log"
TMPDIR="/tmp"
EMAIL="email@gmail.com"
SUBJ="Asterisk"
LOG_OK="yes"

show_registry () {
asterisk -rx "sip show registry" > $TMPDIR/astreg.tmp
achtung=$(awk '$5 != "Registered" && $2 != "SIP" && NR > 1 { print $3, "offline" }' $TMPDIR/astreg.tmp)
if [ "x$achtung" == "x" ]
    then {
    if [ $LOG_OK == "yes" ]; then echo "$(date '+[%d-%m-%y %T]%t')OK" >>$LOGFILE; fi
    exit 0
    }
fi
}

show_registry
echo "$(date '+[%d-%m-%y %T]%t')Waiting 5 second before repeating check" >>$LOGFILE
sleep 5
show_registry
noinet=$(ping -c 4 8.8.8.8 | grep '100% packet loss')
if [ "x$noinet" != "x" ]
    then {
    echo "$(date '+[%d-%m-%y %T]%t')No Internet connection" >>$LOGFILE
    exit 0
    }
fi
chanactive=$(asterisk -rx "core show channels" | awk '$1 != "0" && $2 == "active" { print "Active channels detected" }')
if [ "x$chanactive" != "x" ]
    then {
    echo "$(date '+[%d-%m-%y %T]%t')Offline registry trunks detected. Cannot reload while active channels detected" >>$LOGFILE
    exit 0
    }
fi
echo "$(date '+[%d-%m-%y %T]%t')Network restarting now and SIP trunks reloading:" >>$LOGFILE
echo "-----">>$LOGFILE
cat $TMPDIR/astreg.tmp >>$LOGFILE
echo "-----" >>$LOGFILE
echo "$(date '+[%d-%m-%y %T]%t')Network restarting now and SIP trunks reloading" | mail -s "$SUBJ" $EMAIL
service network restart
asterisk -rx "sip reload"
exit 0
Логика работы такая: коннектимся в астер и снимаем дамп sip show registry в файл. Проверяем с помощью awk, все ли транки зареганы. Если нет - ждем 5 секунд и повторяем проверку (вдруг в момент первой проверки был запрос на регистрацию). Если опять нет - смотрим, а инет есть или нет? Если нет, то ничего сделать не можем, если есть - проверяем наличие активных разговоров. Если нет таковых - делаем перезагрузку сети на сервере и sip reload на астере. Дамп в файл пишем только для того, чтобы его можно было вставить в лог.
Переменные в начале скрипта, полагаю, не нуждаются в комментах. Само собой, для периодичной проверки скрипт необходимо засунуть в cron :)
Glukinho
Сообщения: 661
Зарегистрирован: 07 янв 2011, 20:05

Re: Скрипт проверки регистрации транков

Сообщение Glukinho »

Если нет таковых - делаем перезагрузку сети на сервере и sip reload на астере
Хорошо, винду не переставляем заодно)
Может, лучше разобраться, почему регулярно нужны такие нетривиальные меры?
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Re: Скрипт проверки регистрации транков

Сообщение TVMaker »

Я не говорил, что у меня ежечасно что-то отсыхает. Скрипт следит за возможными отсыханиями и пытается поправить ситуацию. В случае мультифона помогает, остальные транки пока не отваливались. А насчет разобраться - как раз можно посмотреть по логу скрипта, насколько часто требовалось передергивать сетевой сервис. Отслеживать это по выхлопу самого астера - да ну нафиг.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH