Страница 1 из 2

Callback средствами bash

Добавлено: 28 окт 2013, 19:11
TVMaker
Здравствуйте! Мне двадцать лет, я бородат, живу с мамой, тролль, лжец и девственник. Вот и сейчас... P.S. Извените за неровный почерк.! Реализовал у себя callback при помощи внешнего bash-скрипта. Пробовал на ПХП - так и не смог заставить работать конструкцию "mv tempfile .../outgoing/" - нехватка прав, видимо. А где их прописывать на бизибоксе синолоджи - бог его знает. Поэтому реализовал на bash. В общих чертах выглядит так: звоню с мобилы - скрипт отрабатывает, сбрасывает звонок, перезванивает.
Есть один недостаток - при вызове скрипта, формирующего call-файл, звонок не успевает сброситься (точнее, мобила не успевает отреагировать на сброс), как тут же летит входящий звонок. Это чревато пропущенным вызовом в списке звонящих на мобиле, но со второй попытки дозвона всё подхватывается. Пробовал в скрипте вставить sleep перед mv - так бестолку, ибо пока скрипт не выполнится - мой звонок не сбросится, хоть sleep 100 ставь - то же самое.
На ПХП можно сделать время создания файла "немного из будущего" - а можно ли на bash такое организовать? Про touch -t в курсе. А вот какой ему параметр передать - не догоняю. Нужно же прочесть текущее время, прибавить секунд несколько и применить к файлу - может, гуру bash'а подскажут, реально ли такое сделать?

Re: Callback средствами bash

Добавлено: 28 окт 2013, 20:38
Samael28
cron/fcron?
В течении минуты будет результат.
Ну а вообще проще разобраться с правами и юзать пехапе.

Re: Callback средствами bash

Добавлено: 29 окт 2013, 08:33
virus_net
Можно просто в диалплане сделать Wait(5) и в callback файле набирать нужный котекст через Local, а там тебе и Wait и Dial
TVMaker писал(а): Про touch -t в курсе. А вот какой ему параметр передать - не догоняю.
Пример на PHP:

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

$cmd=sprintf("/usr/bin/touch -t %s /var/spool/asterisk/tmp/my_call_file",date("ymdHi.s",time()+10));
Соответственно на bash будет что то подобное:

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

time=`/bin/date +%y%m%d%H%M.%S`
/usr/bin/touch -t $time /var/spool/asterisk/tmp/my_call_file

Re: Callback средствами bash

Добавлено: 30 окт 2013, 17:10
TVMaker
Решил следующим образом, вставив перед mv:

dd=`eval date +%s`
let "dd += 600"
newtime=`date -d @$dd +'%y%m%d%H%M.%S'`
touch -t $newtime /opt/tmp/$2

Только почему-то данная конструкция работает "при педальном приводе" - то есть из cli всё как надо. При вызове из диалплана с помощью system не отрабатывает строчка touch -t. То есть файл создается, заполняется нужными строками, перемещается, а дата изменения остается прежней. При вызове скрипта из cli ручками с нужными параметрами ($1 - номер телефона, $2 - имя файла) всё отрабатывает корректно. У создаваемого call-файла все права root.
:cry:

PS. 600 секунд прибавляю для визуальности при отладке :)

Re: Callback средствами bash

Добавлено: 30 окт 2013, 17:19
zzuz
Прочитал топик , бровь на макушку заползла от таких извращений. Крайне удивлен наличием отвечающих.

Re: Callback средствами bash

Добавлено: 30 окт 2013, 17:26
TVMaker
Простите, каких извращений? Что извратного в желании сделать отложенный колбэк? Способ? Что извратного в штатном bash? Знаете иной способ? Предложите.

Re: Callback средствами bash

Добавлено: 30 окт 2013, 19:43
zzuz
Где там bash скрипт? При чем тут вообще астериск? Вы в линуксе обратиться к файлу не можете , а за колбеки браться решили.

Re: Callback средствами bash

Добавлено: 30 окт 2013, 21:50
virus_net
TVMaker писал(а): У создаваемого call-файла все права root.
ну а asterisk от какого пользователя запущен ?
ну и на закуску

Re: Callback средствами bash

Добавлено: 30 окт 2013, 22:16
TVMaker
И астер от рута (знаю, что так стремно). Если есть права на создание call-файла и его перемещение, то должны быть и на изменение свойств времени... Весь день гуглю, ничего не выгуглил полезного :?

Re: Callback средствами bash

Добавлено: 30 окт 2013, 22:29
virus_net
ты прочел статью по линку ?
virus_net писал(а):ну и на закуску
Исходя из:
TVMaker писал(а):touch -t $newtime /opt/tmp/$2
TVMaker писал(а):И астер от рута
то мне кажется ты наступаешь на те же грабли, которые описаны в статье и в которой озвучены уже два решения проблемы