Запуск Bash скрипта из диаплана (System)
Добавлено: 15 дек 2013, 22:14
Не так давно изучаю астериск, но обычно 99% вопросов отпадали с помощью гугла и поиска по форуму. А тут что то прям никак 3 день воюю не пойму как сделать. У меня есть пара скриптов которые работают при звонке, сработали и все, все нормально, а тут вот немного другая задача.
Нужно после звонка просто запустить скрипт никак не связанный с астериском, который несколько часов будет выполнять там свои задачи. И вот каким способами я пытался это сделать и что из этого вышло.
1. exten => 99,1,System(/etc/asterisk/scripts/test.sh)
Работает в принципе. Но дальше решил все таки поднять трубку поздороваться, и т д .
2. exten => 99,1,Answer()
exten => 99,n,System(/etc/asterisk/scripts/test.sh)
exten => 99,n,Hangup()
И тут ждал первый сюрприз. Скрипт запустился все хорошо. Но трубку то не ложит пока не завершит работу скрипт. А если положить самому то
WARNING[19462]: chan_sip.c:4213 __sip_autodestruct: Autodestruct on dialog 'NzE2Y2UxZDkxYjgyNjNkY2U2ZDI0ZDNlY2EyYmJhNmQ' with owner SIP/102-0000000c in place (Method: BYE). Rescheduling destruction for 10000 ms
Эта ошибка идет до того момента пока скрипт не завершился. И как я понял из гугла то каналы незакрытые остаются, лагать будет потом.
3.
exten => 99,1,Answer()
exten => 99,n,Hangup()
exten => h,1,System(/etc/asterisk/scripts/test.sh)
Тут почему то опять трубку звонящего не вешает, но скрипт работает так же. Если самому положить то опять ошибка. Но мне через h немного не подходит как я понял так как скриптов может быть много, срабатывать будут в зависимости от введенной команды через Rеad.
4. А еще пробовал сделать скрипт который бы запускал главный скрипт, думал Астериск выполнит и забудет. А он следит за тем скриптом вторым так же. Родительский процесс дочерний. Такие дела.
Подскажите пожалуйста как сделать. Ответить на звонок, выполнить скрипт, нормально завершить вызов, и что бы астериск вообще про этот скрипт забыл.
Нашел еще вот этот момент это оно? system() выполняет команду ОС, заданную в качестве аргумента, вызывая шелл
/bin/sh -c command, и происходит вызов из system, когда вызываемая
программа закончит работу. Как то надо из скрипта передать астериску что мол работа выполнена а работать продолжать?
Нужно после звонка просто запустить скрипт никак не связанный с астериском, который несколько часов будет выполнять там свои задачи. И вот каким способами я пытался это сделать и что из этого вышло.
1. exten => 99,1,System(/etc/asterisk/scripts/test.sh)
Работает в принципе. Но дальше решил все таки поднять трубку поздороваться, и т д .
2. exten => 99,1,Answer()
exten => 99,n,System(/etc/asterisk/scripts/test.sh)
exten => 99,n,Hangup()
И тут ждал первый сюрприз. Скрипт запустился все хорошо. Но трубку то не ложит пока не завершит работу скрипт. А если положить самому то
WARNING[19462]: chan_sip.c:4213 __sip_autodestruct: Autodestruct on dialog 'NzE2Y2UxZDkxYjgyNjNkY2U2ZDI0ZDNlY2EyYmJhNmQ' with owner SIP/102-0000000c in place (Method: BYE). Rescheduling destruction for 10000 ms
Эта ошибка идет до того момента пока скрипт не завершился. И как я понял из гугла то каналы незакрытые остаются, лагать будет потом.
3.
exten => 99,1,Answer()
exten => 99,n,Hangup()
exten => h,1,System(/etc/asterisk/scripts/test.sh)
Тут почему то опять трубку звонящего не вешает, но скрипт работает так же. Если самому положить то опять ошибка. Но мне через h немного не подходит как я понял так как скриптов может быть много, срабатывать будут в зависимости от введенной команды через Rеad.
4. А еще пробовал сделать скрипт который бы запускал главный скрипт, думал Астериск выполнит и забудет. А он следит за тем скриптом вторым так же. Родительский процесс дочерний. Такие дела.
Подскажите пожалуйста как сделать. Ответить на звонок, выполнить скрипт, нормально завершить вызов, и что бы астериск вообще про этот скрипт забыл.
Нашел еще вот этот момент это оно? system() выполняет команду ОС, заданную в качестве аргумента, вызывая шелл
/bin/sh -c command, и происходит вызов из system, когда вызываемая
программа закончит работу. Как то надо из скрипта передать астериску что мол работа выполнена а работать продолжать?