среда, 24 августа 2016 г.

Автодозвон в Asterisk.

Почти все тоже самое, что и тут, только у меня Asterisk 1.8 собранный из исходников.
(В 13-том Asterisk-е тоже все ок.)

1. Создаем контекст для автодозвонщика, который будет дергать скрипт создающий call-файл для Астера:

[autocall]

exten => _99X.,1,Answer()
exten => _99X.,n,System(/home/asterisk/autodial.sh ${CALLERID(num)} ${EXTEN:2})
exten => _99X.,n,Playback(beep)
exten => _99X.,n,Hangup()

2.  Еще один контекст, который собственно, будет использоваться Астериском при дозвоне на основании созданного скриптом call-файла:

[dozvonka]

exten => _X,1,Dial(SIP/${EXTEN})
exten => _XXXXXXX,1,NoCDR() ;если настроен CDR, и не хотим спама в базе
exten => _XXXXXXX,n,Dial(SIP/${EXTEN}@westcall-reg)
exten => _7XXXXXXXXXX,1,NoCDR() ;если настроен CDR, и не хотим спама в базе
exten => _7XXXXXXXXXX,n,Dial(SIP/${EXTEN}@sipnet)


3. Скрипт который дергает Астер:

#!/bin/sh
CALLERNUM=$1
DIALNUM=$2
FILENAME=$CALLERNUM.call
CALLERINFO="AutoCall to $CALLERNUM <$CALLERNUM>";

echo "Action: originate" >> /home/asterisk/$FILENAME
echo "Channel: Local/$DIALNUM@dozvonka" > /home/asterisk/$FILENAME
echo "MaxRetries: 80" >> /home/asterisk/$FILENAME
echo "WaitTime: 20" >> /home/asterisk/$FILENAME
echo "RetryTime: 10" >> /home/asterisk/$FILENAME
echo "CallerID: $CALLERINFO" >> /home/asterisk/$FILENAME
echo "Extension: $CALLERNUM" >> /home/asterisk/$FILENAME
echo "Set: REALCALLERIDNUM=$DIALNUM" >> /home/asterisk/$FILENAME
echo "Priority: 1" >> /home/asterisk/$FILENAME

chown asterisk:asterisk /home/asterisk/$FILENAME
mv /home/asterisk/$FILENAME /var/spool/asterisk/outgoing/
#~~~~~~~~~~end~of~script~~~~~~~~~~~~

4. Назначим нашего Астериска владельцем скрипта:

chown asterisk:asterisk /home/asterisk/autodial.sh
и сделаем его исполняемым 
chmod +x /home/asterisk/autodial.sh

P.S. Как это работает.
Занято на номере 1111111? 
Набираем 991111111, дергается скрипт, в который передадутся значения номера вызывающего ${CALLERID(num)}, и отрежутся первые две цифры ${EXTEN:2}, создастся call-файл в /home/asterisk/, выполняютя условия скрипта, проигрывается beep, произойдет разъединение, и затем начнется дозвон, согласно диалплана контекста dozvonka. 

В консоли астера (asterisk -rvvvvvvvv) все будет наглядно. 

Когда абонет 1111111 освободится, то получит входящий звонок, когда он снимет трубку, то услышить зумер, как будто он куда-то звонил, в момент, когда 1111111 снимет трубку зазвонит телефон у того, кто инициировал дозвон, он снимет трубку, и они будут говорить)

понедельник, 1 августа 2016 г.

Копия сервера без выключения.

Руководство поставило задачу - сделать копию сервера БД  mysql. Копия потребовалась для тестирования обновлений, которые в дальнейшем должны быть применены на сервере.
Данный сервер БД используется системой биллинга организации, где я в текущий момент работаю. Сервер "железный", а переносить требовалось было на виртуалку Hyper-V. При этом условия были таковы, что нужно было обойтись только штатными средствами ОС, без установки какого-либо дополнительного софта, остановки сервисов, перезагрузок и выключений.
1. Подключаем диск для копии. Загружаемся с Live CD в подготовленной виртуалке. Я грузился с Ubuntu-desktop 14.04. Диск не монтируем. Диск виден в системе как sda.
2. Через Network Manager настраиваем сеть, таким образом, чтобы сервер-источник был доступен по ssh.
3. Открываем терминал, командуем:
sudo -i
получаем рут-привелегии.
4. Переключаемся в консоль сервера который будем копировать, смотрим диски командой
fdisk -l
понимаем, какой надо копировать. В моем случае был единственный диск - sda.
5. Далее на машине загруженной с Live CD командуем:
ssh root@remote "dd if=/dev/sda" | dd of=/dev/sda conv=noerror,sync
вводим пароль рута на сервере источнике,
bs оставил по умолчанию - т.е. 512 байт. Т.к. до этого пробовал использовать bs=8M и потерпел неудачу, но т.к. процедуры связанные с dd занимают продолжительное время решил не экспериментировать. Теперь надо ждать когда dd снимет дамп, ошибок быть не должно.
6. Dd отработал, можно глянуть разметку тем же fdisk, и сравнить с разметкой на сервере, который мы копировали. Они должны быть одинаковы. Теперь можно загрузиться с этого диска. Все должно пройти корректно, но могут и возникнуть проблемы, например с отсутствием нужных драйверов, тогда придется разбираться.
7. Завершающим шагом является снятие дампа БД mysql на сервере источнике, и заливка дампа на сервере приемнике.