По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Сейчас мы докажем, что в FreePBX можно записать вообще всё. Мы уже рассказывали про логику записи звонка и том на каких фазах мы можем её контролировать. Однако, стандартный функционал записи ограничивается модулем, в рамках которого мы хотим начать запись. Например, если мы включаем запись на внутреннем номере (Extension), то услышим только часть звонка, которая началась, когда абонент данного номера снял трубку. Но что, если мы хотим записать ещё и ту часть звонка, которая была до этого? Например, как звонящий терпеливо выбирал опции нашего IVR и какие комментарии при этом отпускал? :) Для этого в FreePBX существует специальный модуль - Call Recording, который позволяет принудительно включить или отключить автоматическую запись звонка на определенном его этапе. Любые другие опции записи, которые были включены до этого, при этом будут проигнорированы. Но самое главное, что записи звонков, сделанные через этот модуль, будут содержать все голосовые приветствия (Announcement), музыку на ожидании (Music On Hold) и другие сообщения, которые проигрывает наша IP-АТС каждому позвонившему абоненту. Множество модулей во FreePBX, таких как модуль очередей (Queues), входящей маршрутизации (Inbound Routes), групп вызова (Ring Group), позволяют управлять записью звонка напрямую. Для этого в них есть специальные опции – Call Recording, которые можно при необходимости активировать. Модуль, о котором мы говорим в этой статье, позволяет настроить принудительное начало записи звонка ещё до того, как он отправится на какое-нибудь направление, которое не имеет опции записи. Например на Page группу или IVR. Настройка Перед установкой, проверьте какая версия модуля callrecording у вас установлена. Для этого в консоли введите команду: fwconsole ma list | grep callre. Версия модуля должна быть 14.0.5 и выше, поскольку в более ранних версиях, обнаружен баг (FREEPBX-18899 (https://issues.freepbx.org/browse/FREEPBX-18899)) и функционал полной записи работать не будет :(. Если установлена более ранняя версия, то сделайте обновление данного модуля После этого переходим во вкладку Settins - Advanced Settings и в разделе Call Recording ищем новую опцию, которая должна появиться - Call Recording Option, её значение устанавливаем в No и только после этого переходим к следующему шагу Для настройки открываем Applications → Call Recording и нажимаем Add Call Recording: Перед нами открывается меню добавления нового правила записи звонков: Как видите всё достаточно просто: Description - Описание данного правила; Call Recording Mode - Логика записи, подробно описана в нашей статье; Force и Never заменяют друг друга и имеют высший приоритет чем Yes и No Yes и No имеют одинаковый приоритет Когда один и больше Yes или No встречается в call flow, в приоритете всегда будет первое значение. Последующие опции Yes или No не переопределяют первую. Force и Never будут всегда переопределять опции, которые установлены ранее. Force и Never будут всегда заменять друг друга. Например если сначала был установлен Force, а потом встречается Never, то в приоритете будет Never Force и Never будут всегда заменять предустановленные опции Yes и No Yes и No никогда не заменять Force и Never Don’t Care не будет изменять предыдущую опцию. Destination - Указывает направление куда необходимо отправить звонок после того, как была включена или же отключена запись. Применение Давайте представим себе, что у нас есть входящий маршрут (Main_Route), звонки с которого отправляются в IVR (Main_IVR). Но мы хотим слышать что говорит звонящий, находясь в меню IVR и слушая голосовое сообщение, например для последующего анализа и оценки его реакции. Для этого, мы создадим Call Recording (For_IVR_Recordings), которое будет включать запись и отправлять звонок на тот же самый IVR, а сам Call Recording – повесим на входящий маршрут: Готово! Теперь мы получим запись звонка, которая будет содержать часть, где звонящий находится в IVR и слушает его сообщение, и, возможно даёт какие-нибудь комментарии. Остальная часть записи будет зависеть от того, какие опции настроены в IVR.
img
NTFS - это система хранения файлов, стандартная для компьютеров Windows, но системы Linux также используют ее для организации данных. Большинство систем Linux монтируют диски автоматически. Однако в конфигурациях с двойной загрузкой, где требуется обмен файлами между двумя системами с разделами NTFS, эта процедура выполняется вручную. Эта статья покажет вам, как смонтировать раздел NTFS в Linux с разрешениями только для чтения или чтения и записи. Смонтировать раздел NTFS с разрешением только для чтения Выполните следующие действия, чтобы смонтировать раздел NTFS с доступом только для чтения. Примечание. Раздел только для чтения позволяет пользователям читать файлы. Чтобы включить запись в раздел NTFS, обратитесь ко второму разделу статьи. Определить раздел NTFS Перед монтированием раздела NTFS определите его с помощью команды parted: sudo parted -l В приведенном выше примере два раздела NTFS находятся на диске /dev/sdb. Прежде чем продолжить, запишите номер раздела, который вы хотите смонтировать. Вы также можете использовать команды fdisk и grep, чтобы показать на диске только разделы NTFS: sudo fdisk -l | grep NTFS Создать точку монтирования и смонтировать раздел NTFS В этом примере мы смонтируем раздел /dev/sdb1 с разрешением только для чтения. Сначала создайте точку монтирования с помощью команды mkdir: sudo mkdir /mnt/ntfs1 Затем смонтируйте раздел в созданный вами каталог. Используйте команду mount и путь к разделу, который вы указали ранее: sudo mount -t ntfs /dev/sdb1 /mnt/ntfs1 Используйте инструмент для освобождения диска, чтобы проверить подробную информацию обо всех файловых системах и убедиться, что вы успешно смонтировали раздел: df -hT Раздел /dev/sdb1 отображается как смонтированный в нижней части списка. Теперь у вас есть доступ только для чтения к этому разделу NTFS. Смонтировать раздел NTFS с разрешениями на чтение и запись Чтобы смонтировать раздел NTFS с разрешениями на чтение и запись, вам необходимо установить fuse и ntfs-3 в вашей системе. Выполните следующие действия, чтобы завершить процесс монтирования. Примечание. В некоторых дистрибутивах Linux по умолчанию уже установлены fuse и ntfs-3g. Обновить репозитории пакетов Выполните следующую команду, чтобы загрузить и обновить репозитории пакетов: sudo apt update Установите Fuse и ntfs-3g Чтобы установить fuse в вашей системе Linux из репозитория по умолчанию, используйте соответствующий менеджер пакетов. В нашем примере мы используем apt в Ubuntu. sudo apt install fuse Когда установка завершится, установите ntfs-3g, запустив: sudo apt install ntfs-3g В случае, если fuse и ntfs-3g уже установлены, вывод выглядит примерно так, как показано ниже: Смонтировать раздел NTFS После установки пакетов программного обеспечения fuse и ntfs-3g смонтируйте раздел NTFS. Сначала создайте точку монтирования с помощью команды mkdir: sudo mkdir /mnt/ntfs2 Затем используйте команду mount, чтобы смонтировать нужный раздел. Например, /dev/sdb2: sudo mount -t ntfs-3g /dev/sdb2 /mnt/ntfs2/ Чтобы проверить, смонтирован ли раздел, выполните команду df: df -hT Теперь у вас есть права на чтение и запись для подключенного раздела NTFS. Примечание. Для монтирования раздела через ntfs-3g рекомендуется ядро Linux версии 2.6.20 или новее.
img
Сегодня в статье рассказываем про плагин kubectl, который использует tmux, чтобы быстрее устранить неполадки Kubernetes. Kubernetes - это процветающая платформа для взаимодействия контейнеров с открытым исходным кодом, которая обеспечивает масштабируемость, высокую доступность, надежность и отказоустойчивость приложений. Одной из его многочисленных функций является поддержка запуска пользовательских сценариев или двоичных файлов через основной двоичный файл клиента, kubectl. Kubectl очень мощный, и позволяет пользователям делать с ним все, что они могли бы сделать непосредственно в кластере Kubernetes. Устранение неполадок с псевдонимами Kubernetes Каждый, кто использует Kubernetes для управления контейнерами, знает о его особенностях - а также о сложности, причиной которого является его дизайн. Например, существует острая необходимость упростить поиск и устранение неисправностей в Kubernetes с помощью чего-то более быстрого и практически не требующего ручного вмешательства (за исключением критических ситуаций). Существует много сценариев, которые следует учитывать при устранении неполадок. В одном сценарии вы знаете, что нужно запускать, но синтаксис команды - даже если она может выполняться как одна команда - чрезмерно сложен, или для работы может потребоваться один-два входа. Например, если часто требуется перейти в запущенный контейнер в пространстве имен System, вы можете неоднократно писать: kubectl --namespace=kube-system exec -i -t <your-pod-name> Для упрощения поиска и устранения неисправностей можно использовать псевдонимы этих команд в командной строке. Например, можно добавить следующие файлы dotfiles (.bashrc или .zshrc): alias ksysex='kubectl --namespace=kube-system exec -i -t' Это один из многих примеров из хранилища общих псевдонимов Kubernetes, который показывает один из способов упрощения функций в kubectl. Для чего-то простого, подобного этому сценарию, достаточно псевдонима. Переключение на подключаемый модуль kubectl Более сложный сценарий устранения неполадок включает в себя выполнение множества команд, одной за другой, для исследования среды и выведения заключения. Одних псевдонимов недостаточно для этого варианта использования; необходима воспроизведение логического узла и корреляция между многими частями развертывания Kubernetes. На самом деле вам нужна автоматизация для получения нужного результата за меньшее время. Рассмотрим пространства имен от 10 до 20 или даже от 50 до 100, содержащие различные микросервисы в вашем кластере. Что поможет вам начать устранение неполадок в этом сценарии? Вам потребуется что-то, что может быстро определить, какой модуль в каком пространстве имен вызывает ошибки. Вам понадобится что-то, что сможет просматривать журналы всех модулей в пространстве имен. Также может потребоваться просмотр журналов определенных модулей в определенном пространстве имен, в котором были обнаружены ошибки. Любое решение, охватывающее эти вопросы, было бы очень полезно при изучении производственных проблем, а также в ходе циклов разработки и тестирования. Чтобы создать нечто более мощное, чем простой псевдоним, можно использовать плагины kubectl. Плагины подобны автономным сценариям, написанным на любом языке сценариев, но предназначены для расширения функциональных возможностей главной команды при работе в качестве администратора Kubernetes. Чтобы создать плагин, необходимо использовать правильный синтаксис kubectl- < имя-плагина > для того, чтобы скопировать сценарий в один из экспортированных путей в $PATH и предоставить ему исполняемые разрешения chmod+x. После создания плагина и перемещения его в свой путь, вы можете немедленно запустить его. Например, у меня на пути есть kubectl-krwl и kubectl-kmux: $ kubectl plugin list The following compatible plugins are available: /usr/local/bin/kubectl-krawl /usr/local/bin/kubectl-kmux $ kubectl kmux Теперь давайте изучим, как выглядит обеспечение работы Kubernetes с tmux. Использование силы tmux Tmux - очень мощный инструмент, на который полагаются многие команды для устранения проблем, связанных с упрощением работы - от разделения окон на панели для выполнения параллельной отладки на нескольких машинах до мониторинга журналов. Одним из основных его преимуществ является то, что его можно использовать в командной строке или в сценариях автоматизации. Я создал плагин kubectl, который использует tmux, чтобы сделать поиск и устранение неисправностей гораздо проще. Я буду использовать аннотации, чтобы пройти через логику за плагином (и оставить его для вас, чтобы пройти через полный код плагина): #NAMESPACE is namespace to monitor. #POD is pod name #Containers is container names # initialize a counter n to count the number of loop counts, later be used by tmux to split panes. n=0; # start a loop on a list of pod and containers while IFS=' ' read -r POD CONTAINERS do # tmux create the new window for each pod tmux neww $COMMAND -n $POD 2>/dev/null # start a loop for all containers inside a running pod for CONTAINER in ${CONTAINERS//,/ } do if [ x$POD = x -o x$CONTAINER = x ]; then # if any of the values is null, exit. warn "Looks like there is a problem getting pods data." break fi # set the command to execute COMMAND=”kubectl logs -f $POD -c $CONTAINER -n $NAMESPACE” # check tmux session if tmux has-session -t <session name> 2>/dev/null; then <set session exists> else <create session> fi # split planes in the current window for each containers tmux selectp -t $n ; splitw $COMMAND ; select-layout tiled ; # end loop for containers done # rename the window to identify by pod name tmux renamew $POD 2>/dev/null # increment the counter ((n+=1)) # end loop for pods done< <(<fetch list of pod and containers from kubernetes cluster>) # finally select the window and attach session tmux selectw -t <session name>:1 ; attach-session -t <session name>; После запуска скрипта плагина он будет выдавать выходные данные, аналогичные изображению ниже. Каждый модуль имеет собственное окно, и каждый контейнер (если их несколько) разделяется панелями в окне модуля в потоковые журналы по мере их поступления. Преимущество tmux можно увидеть ниже; При правильной конфигурации можно даже увидеть, какое окно активно (см. белые вкладки). Заключение Псевдонимы всегда полезны для простого устранения неполадок в средах Kubernetes. Когда среда становится более сложной, плагин kubectl является мощным вариантом для использования более продвинутых сценариев. Ограничения в выборе языка программирования, который можно использовать для записи плагинов kubectl, нет. Единственное требование состоит в том, чтобы соглашение об именовании в пути являлось исполняемым и не имело того же имени, что и существующая команда kubectl. Прочитать полный код или попробовать плагины можно тут
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59