Asterisk: Unable to open audio file for recording (Permission denied) в MixMonitor
- В логах появляется ошибка:
WARNING[...]: app_mixmonitor.c: Unable to open audio file /var/spool/asterisk/monitor/...: Permission denied. - Записи разговоров не сохраняются на диск или имеют нулевой размер (0 байт).
- Команда MixMonitor в плане набора завершается с ошибкой без прерывания самого вызова.
- Примонтированные сетевые хранилища (NFS/CIFS) не позволяют процессу Asterisk создавать новые подпапки.
1. Исправление прав доступа к каталогу записей
Убедитесь, что директория для хранения записей принадлежит пользователю и группе asterisk:
mkdir -p /var/spool/asterisk/monitor
chown -R asterisk:asterisk /var/spool/asterisk/monitor
chmod -R 755 /var/spool/asterisk/monitor2. Проверка контекстов SELinux (для RHEL / Rocky Linux)
# Проверка текущего контекста безопасности
ls -dZ /var/spool/asterisk/monitor
# Восстановление стандартного контекста
semanage fcontext -a -t asterisk_spool_t "/var/spool/asterisk/monitor(/.*)?"
restorecon -Rv /var/spool/asterisk/monitor3. Автоматическое создание поддиректорий в Dialplan (extensions.conf)
Если путь к файлу включает динамические подкаталоги по датам (ГГГГ/ММ/ДД), создавайте их до запуска MixMonitor с помощью функции SHELL или опции m:
[internal]
exten => _X.,1,NoOp(Starting Call Recording)
same => n,Set(REC_DIR=/var/spool/asterisk/monitor/${STRFTIME(${EPOCH},,%Y/%m/%d)})
same => n,Set(REC_FILE=${REC_DIR}/${UNIQUEID}.wav)
same => n,MixMonitor(${REC_FILE},b)
same => n,Dial(PJSIP/${EXTEN},30)4. Проверка владельца процесса Asterisk
ps aux | grep asterisk
# Если процесс запущен от root или другого пользователя, исправьте /etc/default/asterisk (или /etc/sysconfig/asterisk):
# AST_USER="asterisk"
# AST_GROUP="asterisk" Частые вопросы (FAQ)
Почему MixMonitor не может создать файл, если директория существует?
Если запись идет во вложенную структуру папок (например, /monitor/2026/03/30/), и этих папок еще нет на диске, fopen() вернет ошибку, если у процесса нет прав на создание вложенных каталогов.
Что делает флаг 'b' в приложении MixMonitor?
Флаг 'b' указывает MixMonitor начинать запись аудио только после того, как вызываемый канал ответит на вызов (состояние UP/Answered).
Как монтировать NFS шару для записей MixMonitor без проблем с правами?
Указывайте опции монтирования: no_root_squash, anonuid=..., anongid=... или монтируйте с явным сопоставлением UID/GID пользователя asterisk.
Какой формат аудио наименее требователен к ресурсам при записи?
Формат .wav (без сжатия) или .alaw/.ulaw требует минимум CPU, так как Asterisk сохраняет медиапоток без промежуточного перекодирования (transcoding).