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

sip reload из bash скрипта не работает

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

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

Ответить
Finn
Сообщения: 31
Зарегистрирован: 19 апр 2023, 09:51

sip reload из bash скрипта не работает

Сообщение Finn »

Приветствую!
Выход в интернет с двух провайдеров - основной и резервный. Issabel4 PBX за NAT. Решил автоматизировать смену IP при падении основного канала. Подсмотрел в интернете скрипт, засунул в cron и начал тестить. Так вот самая последняя команда и не работает.

Cron:
*/3 * * * * root /var/sh/ip_check/ip_check.sh

Скрипт:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
#!/bin/bash
# ip_check.sh
# Description: script that queries checkip.dyndns.com to find the server's external IP address. Updates asterisk's externip value and does a sip reload if necessary.

is_ip(){
input=$1
octet1=$(echo $input | cut -d "." -f1)
octet2=$(echo $input | cut -d "." -f2)
octet3=$(echo $input | cut -d "." -f3)
octet4=$(echo $input | cut -d "." -f4)
stat=1
if [[ $input =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] && [ $octet1 -le 255 ] && [ $octet2 -le 255 ] && [ $octet3 -le 255 ] && [ $octet4 -le 255 ];
then stat=0
fi
return $stat
}

EXTERNIP=`wget -qO- checkip.dyndns.com | awk '{print $6}'| cut -d "<" -f1`
is_ip $EXTERNIP
if [ $? -ne 0 ];
then
logger -s "ip_check.sh: External IP address invalid or unavailable, exiting."
exit 1
fi
OLDEXTERNIP=`grep externip /etc/asterisk/sip_general_additional.conf | cut -d"=" -f2`
echo $OLDEXTERNIP
if [ "$EXTERNIP" = "$OLDEXTERNIP" ]; then
logger -s "ip_check.sh: External IP address "$EXTERNIP" is the same, nothing to do exiting."
exit 0
else
logger -s "ip_check.sh: External IP address has changed "$OLDEXTERNIP" --> "$EXTERNIP", changing /etc/asterisk/sip_general_additional.conf"
grep -v "externip" /etc/asterisk/sip_general_additional.conf > /etc/asterisk/sip_general_additional.conf.tmp
echo "externip=$EXTERNIP" >> /etc/asterisk/sip_general_additional.conf.tmp
cp /etc/asterisk/sip_general_additional.conf.tmp /etc/asterisk/sip_general_additional.conf
rm /etc/asterisk/sip_general_additional.conf.tmp
logger -s "Doing asterisk -rx sip reload"
asterisk -rx "sip reload"
fi
Пробовал в команде asterisk -rx "sip reload" менять кавычки на одинарные - тоже самое. Если команду скопировать и вставить в командную строку - срабатывает. В логе asterisk:

[2024-08-08 11:38:02] VERBOSE[3423] asterisk.c: Remote UNIX connection
[2024-08-08 11:38:02] VERBOSE[3536] chan_sip.c: Reloading SIP
[2024-08-08 11:38:02] VERBOSE[26034] asterisk.c: Remote UNIX connection disconnected

А если отрабатывает скрипт - центральной строчки в логе нет.
Может кто сталкивался с таким? Как понять что не так?
Finn
Сообщения: 31
Зарегистрирован: 19 апр 2023, 09:51

Re: sip reload из bash скрипта не работает

Сообщение Finn »

Причем, не отрабатывает скрипт только запущенный через cron. Если запустить тот же скрипт из командной строки - все работает. :(
Finn
Сообщения: 31
Зарегистрирован: 19 апр 2023, 09:51

Re: sip reload из bash скрипта не работает

Сообщение Finn »

Странно, но добавил в команду sudo и в логах asterisk появилась строчка "Reloading SIP":

sudo asterisk -rx "sip reload"

Почему - не понял, но после окончания рабочего дня проведу тесты на боевой и тогда будет точно известно работает или нет.
Finn
Сообщения: 31
Зарегистрирован: 19 апр 2023, 09:51

Re: sip reload из bash скрипта не работает

Сообщение Finn »

Тесты проведены. Все работает.
Надо будет только выяснить чем запуск скрипта из командной строки при входе под root отличается от запуска того же скрипта из cron под root. :roll:
El_Vago
Сообщения: 63
Зарегистрирован: 05 дек 2017, 12:46

Re: sip reload из bash скрипта не работает

Сообщение El_Vago »

Процентов 99 уверен, что из-за переменных окружения.
Finn
Сообщения: 31
Зарегистрирован: 19 апр 2023, 09:51

Re: sip reload из bash скрипта не работает

Сообщение Finn »

El_Vago писал(а):Процентов 99 уверен, что из-за переменных окружения.
Скорее всего, но я этого механизма не знаю - потому и непонятно.
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: sip reload из bash скрипта не работает

Сообщение Zavr2008 »

Правильнее идея поднять 2 виртуалки c транзитными астерами каждом внешнем IP чтобы не переключение было, а параллельная работа.
Также если PJSIP уже зашел то аналогичное можно сделать с 2мя транспортами в нем, либо 1 на SIP, другой на PJSIP.
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
Finn
Сообщения: 31
Зарегистрирован: 19 апр 2023, 09:51

Re: sip reload из bash скрипта не работает

Сообщение Finn »

Zavr2008 писал(а):Правильнее идея поднять 2 виртуалки c транзитными астерами каждом внешнем IP чтобы не переключение было, а параллельная работа.
Также если PJSIP уже зашел то аналогичное можно сделать с 2мя транспортами в нем, либо 1 на SIP, другой на PJSIP.
А смысл усложнять систему? Еще проще выставить pbx в интернет. Два внешних интерфейса, один внутренний. Но там чисто физически столько сетевух не всунуть. В общем, думал я про это. Данное решение показалось самым оптимальным.
А PJSIP надо еще поизучать. Не имел с ним дела.
El_Vago
Сообщения: 63
Зарегистрирован: 05 дек 2017, 12:46

Re: sip reload из bash скрипта не работает

Сообщение El_Vago »

Finn писал(а):
El_Vago писал(а):Процентов 99 уверен, что из-за переменных окружения.
Скорее всего, но я этого механизма не знаю - потому и непонятно.
Попробуйте в скрипте указать абсолютные пути до asterisk /usr/sbin/asterisk или какой у Вас.
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: sip reload из bash скрипта не работает

Сообщение Zavr2008 »

Два внешних интерфейса
И лишь один default gateway. Иначе мудрить ..
Ту схему что я описал мы делали, работает.

Еще есть вариант - VPS и через нее уже выходить. Но в свете последних ограничений регулятора в РФ это становится тяжким делом.
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH