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

Пропадают каналы.

Проблемы Asterisk без вэб-оболочек и их решения

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

Ответить
mrsol
Сообщения: 2
Зарегистрирован: 16 май 2012, 18:35

Пропадают каналы.

Сообщение mrsol »

Попытаюсь объяснить ситуацию.
Клиент подключается к нашему астериску по SIP соединению и производит вызов.
После прохода по экстеншену, вызов попадает через deadagi в билинговый скрипт (модифицированный a2b).
Далее скрипт перед вызовом команды dial на провайдера, получает текущее имя канала.
Допустим название канала SIP/7573794284-0001b6e5 и записывает это в базу данных.
После чего происходит команда dial на выбранного провайдера.
После дозвона на номер поднимается второй канал, в этом варианте SIP/voicetrading-ring-0001b6e6
Далее клиент делает комбинацию hold-unhold-hold и оставляет канал в холд режиме.
Есть внешний скрипт, который обсчитывает текущие звонки клиентов, и если они уходят за превыещение баланса, то он должен остановить текущий звонок. Подключается через asm manager. Ну и понятное дело работает с бд, где записаны текущие звонки с названием канала (первого канала).
Так вот получается такая ситуация, что чекалка пытается остановить канал SIP/7573794284-0001b6e5, а астериск говорит что такого канала нет.

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

2012-05-14 04:48:12 27578 Error: array (
  'Response' => 'Error',
  'Message' => 'No such channel',
)
При этом таких соединений множество для ОДНОГО клиента.

Далее смотрим в логи. И видим что звонок в момент попытки остановки существует. И заканчивается позже после попытки. Через 4-5 минут в данном случае.

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

[May 14 04:52:24] ERROR[27388] utils.c: write() returned error: Broken pipe
[May 14 04:52:24] VERBOSE[27388] logger.c:     -- AGI Script a2billing.php completed, returning 0
[May 14 04:52:24] VERBOSE[27388] logger.c:     -- Executing [0037745598134@a2billing:5] Hangup("SIP/voicetrading-ring-0001b6ea", "") in new stack
[May 14 04:52:24] VERBOSE[27388] logger.c:   == Spawn extension (a2billing, 0037745598134, 5) exited non-zero on 'SIP/voicetrading-ring-0001b6ea'
При этом видно utils.c: write() returned error: Broken pipe что связь с билинговым скриптом потеряна. И он не отрабатывается.

Билинговый скрипт включен на логирование любых ошибок внутри себя, но ничего не появляется.

В момент данного проиществия не было возможности провести какой-то мониторинг. Есть только логи.
Получается что пропал первый канал SIP/7573794284-0001b6e5 вместе со скриптом, при этом второй канал SIP/voicetrading-ring-0001b6e6 остался рабочим относительно длительное время.

Мы пытались повторить ситуацию, но убить первый канал нам так и не удалось. Множество раз холдили. Пытались убить билинговый процесс (kill, kill -9 и т.д.), процес переходил в зомби, не отрабатывал свой функционал, но ПЕРВЫЙ канал оставался и по нему можно было закончить звонок.

Нагрузка в тот момент была порядка 30-40 одновременных звонков. Из них 30 с таким поведением.
А так система всегда работает на ура.

Куда копать в поисках пропажи канала?

Ниже лог звонка.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: Лог звонка

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

[May 14 04:42:55] VERBOSE[27388] logger.c:     -- Executing [0037745598134@a2billing:1] NoOp("SIP/7573794284-0001b6e5", "0037745598134") in new stack
[May 14 04:42:55] VERBOSE[27388] logger.c:     -- Executing [0037745598134@a2billing:2] Wait("SIP/7573794284-0001b6e5", "1") in new stack
[May 14 04:42:56] VERBOSE[27388] logger.c:     -- Executing [0037745598134@a2billing:3] Set("SIP/7573794284-0001b6e5", "TRANSFER_CONTEXT=no-transfer") in new stack
[May 14 04:42:56] VERBOSE[27388] logger.c:     -- Executing [0037745598134@a2billing:4] DeadAGI("SIP/7573794284-0001b6e5", "a2billing.php|1") in new stack
[May 14 04:42:56] WARNING[27388] res_agi.c: Running DeadAGI on a live channel will cause problems, please use AGI
[May 14 04:42:56] VERBOSE[27388] logger.c:     -- Launched AGI Script /var/lib/asterisk/agi-bin/a2billing.php
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1: A2Billing AGI internal configuration - 1:
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1: file:a2billing.php - line:97 - IDCONFIG : 1
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1: file:a2billing.php - line:98 - MODE : standard
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1: file:a2billing.php - line:110 - AGI Request:
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1: file:a2billing.php - line:111 - Array
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1: (
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_request] => a2billing.php
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_channel] => SIP/7573794284-0001b6e5
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_language] => en
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_type] => SIP
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_uniqueid] => 1336959775.138235
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_callerid] => ---skip---
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_calleridname] => unknown
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_callingpres] => 0
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_callingani2] => 0
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_callington] => 0
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_callingtns] => 0
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_dnid] => 0037745598134
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_rdnis] => unknown
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_context] => a2billing
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_extension] => 0037745598134
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_priority] => 4
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_enhanced] => 0.0
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1:     [agi_accountcode] => --skip--
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1: )
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1: 
------------SKIPED-------------------
[May 14 04:42:56] VERBOSE[27388] logger.c:   a2billing.php|1: file:Class.RealTimeCall.php - line:37 -  try add realtime call 'SIP/7573794284-0001b6e5' in DB
------------SKIPED-------------------
[May 14 04:42:56] VERBOSE[27388] logger.c:     -- AGI Script Executing Application: (Dial) Options: (SIP/0000037745598134@voicetrading-ring|60|rL(5673000:61000:30000))
[May 14 04:42:56] VERBOSE[27388] logger.c:     -- Limit Data for this call:
[May 14 04:42:56] VERBOSE[27388] logger.c:        > timelimit      = 5673000
[May 14 04:42:56] VERBOSE[27388] logger.c:        > play_warning   = 61000
[May 14 04:42:56] VERBOSE[27388] logger.c:        > play_to_caller = yes
[May 14 04:42:56] VERBOSE[27388] logger.c:        > play_to_callee = no
[May 14 04:42:56] VERBOSE[27388] logger.c:        > warning_freq   = 30000
[May 14 04:42:56] VERBOSE[27388] logger.c:        > start_sound    = 
[May 14 04:42:56] VERBOSE[27388] logger.c:        > warning_sound  = timeleft
[May 14 04:42:56] VERBOSE[27388] logger.c:        > end_sound      = 
[May 14 04:42:56] VERBOSE[27388] logger.c:     -- Called 0000037745598134@voicetrading-ring
[May 14 04:42:56] VERBOSE[27388] logger.c:     -- SIP/voicetrading-ring-0001b6e6 is making progress passing it to SIP/7573794284-0001b6e5
[May 14 04:43:05] VERBOSE[27388] logger.c:     -- SIP/voicetrading-ring-0001b6e6 answered SIP/7573794284-0001b6e5
[May 14 04:43:18] VERBOSE[27388] logger.c:     -- Started music on hold, class 'default', on SIP/voicetrading-ring-0001b6e6
[May 14 04:43:20] VERBOSE[27388] logger.c:     -- Stopped music on hold on SIP/voicetrading-ring-0001b6e6
[May 14 04:43:20] VERBOSE[27388] logger.c:     -- Started music on hold, class 'default', on SIP/voicetrading-ring-0001b6e6
------- Вот тут в 2012-05-14 04:48:12 попытка сделать hangup по каналу SIP/7573794284-0001b6e5 , но асетр ответил что такого канала нет.
[May 14 04:52:24] ERROR[27388] utils.c: write() returned error: Broken pipe
------- Тут должен быть вывод с билинга. Но его нет.
[May 14 04:52:24] VERBOSE[27388] logger.c:     -- AGI Script a2billing.php completed, returning 0
------- Последние две строчки непонятны по какому-то другому каналу, но почему они в этом процессе? 
[May 14 04:52:24] VERBOSE[27388] logger.c:     -- Executing [0037745598134@a2billing:5] Hangup("SIP/voicetrading-ring-0001b6ea", "") in new stack
[May 14 04:52:24] VERBOSE[27388] logger.c:   == Spawn extension (a2billing, 0037745598134, 5) exited non-zero on 'SIP/voicetrading-ring-0001b6ea'
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Пропадают каналы.

Сообщение Vlad1983 »

[May 14 04:42:56] WARNING[27388] res_agi.c: Running DeadAGI on a live channel will cause problems, please use AGI
ЛС: @rostel
mrsol
Сообщения: 2
Зарегистрирован: 16 май 2012, 18:35

Re: Пропадают каналы.

Сообщение mrsol »

Ну так работает же основное время.

Ещё полазив по логам было выявлено трансфера с маскарадом.

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

[May 14 04:43:20] VERBOSE[27395] logger.c:     -- SIP/voicetrading-ring-0001b6ea answered SIP/7573794284-0001b6e9
[May 14 04:43:23] VERBOSE[27395] logger.c:     -- Started music on hold, class 'default', on SIP/voicetrading-ring-0001b6ea
[May 14 04:43:24] VERBOSE[2606] logger.c:     -- Stopped music on hold on SIP/voicetrading-ring-0001b6ea
[May 14 04:43:24] VERBOSE[2606] logger.c:     -- Stopped music on hold on SIP/voicetrading-ring-0001b6e6
[May 14 04:43:24] DEBUG[2606] chan_sip.c: SIP transfer: Succeeded to masquerade channels.
Может тут собака порылась?
Хотя в экстешене устанавливается

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

[May 14 04:43:11] VERBOSE[27395] logger.c:     -- Executing [0037745598252@a2billing:3] Set("SIP/7573794284-0001b6e9", "TRANSFER_CONTEXT=no-transfer") in new stack
А блок no-transsfer выглядит так

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

[no-transfer]
; just hang up 
;exten => s,1,Set(CALLTNAME=${EXTEN}date${STRFTIME(${EPOCH},,%y-%m-%d__%H-%M)})
;exten => s,n,NoOp(${CALLTNAME})
exten => s,1,Verbose( !!!! ----- TRANSFER CALL !!! ----------- )
exten => s,n,System(mutt -s "New transfer call for DID ${EXTEN}_date_${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}" mail@mail.mail </tmp/txt )
;exten => s,n,MixMonitor(echo ${CALLTNAME}||${monopt})
exten => s,n,DeadAGI(a2billing.php|1|did)
;exten => s,n,StopMonitor
exten => s,n,Hangup(21)
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH