Страница 1 из 1
SHELL в Asterisk 18
Добавлено: 28 апр 2026, 15:45
AlexeyFatnev
Здравствуйте, все.
После перехода с Asterisk 16 на 18 (новая чистая установка) перестала работать функция записи в файл через dialplan:
same => n,Set(foo=${SHELL(echo '123' > /mnt/disk2/123.txt)})
Вывод:
-- Executing [222@call-out:2] Set("SIP/104-00000357", "foo=") in new stack
файл не создается
При этом
same => n,Set(foo=${SHELL(echo '123')})
Вывод:
-- Executing [222@call-out:2] Set("SIP/104-0000035a", "foo=123
Из чего понимаю, что SHELL работает.
Папка открыта на чтение\запись для всех. Из командной строки echo '123' > /mnt/disk2/123.txt создает нужный файл.
После установки чистой системы, файл каким-то образом создался один раз (с другим именем, так что дело не в перезаписи), после этого не удалось воспроизвести ни разу.
Подскажите, в чем может быть дело?
Подскажите, в каком файле посмотреть лог выполнения SHELL из Asterisk?
Re: SHELL в Asterisk 18
Добавлено: 28 апр 2026, 19:10
Glukinho
А sudo -u asterisk echo '123' > /mnt/disk2/123.txt сработает?
Вместо asterisk подставить вашего конкретного пользователя, под которым запускается астериск.
Re: SHELL в Asterisk 18
Добавлено: 29 апр 2026, 10:44
AlexeyFatnev
Здравствуйте, Glukinho.
Из командной строки (поменял папку):
sudo -u asterisk echo '123' > /home/ubadm/123.txt
sudo -u ubadm echo '123' > /home/ubadm/123.txt
В обоих случаях файл создается.
Из Диалплана в обоих случаях не создается.
Может все-таки SLELL теперь не может использоваться для записи файла? Учитывая наличие функции FILE.
Можно где-то посмотреть лог ошибки?
Re: SHELL в Asterisk 18
Добавлено: 29 апр 2026, 11:04
Zavr2008
Попробовать через SHELL вызвать какой-нить test.sh с параметром 123.
Ну а в этом скрипте уже делать запись в файл.
Re: SHELL в Asterisk 18
Добавлено: 29 апр 2026, 13:10
Glukinho
> Из командной строки (поменял папку):
> sudo -u asterisk echo '123' > /home/ubadm/123.txt
Почему поменял папку? Суть проверки как раз в том, чтобы симулировать создание файла именно от пользователя астериска именно в том же месте, в точности как это делает функция SHELL из диалпалан. Какой смысл проверять в другой папке?
Что-то я сомневаюсь, что функции SHELL есть какое-то дело до того, создает она файлы или нет; дело в правах/путях/selinux еще какой-нибудь затесался.
Re: SHELL в Asterisk 18
Добавлено: 29 апр 2026, 13:20
Glukinho
Сейчас проверил на 18.20.2, вот такой диалплан успешно создает файл /tmp/file.txt с содержимым "123":
Код: Выделить всё
[test]
exten => s,1,Set(foo=${SHELL(echo '123' > /tmp/file.txt)})
same => n,NoOp(${foo})
Переменная ${foo} при этом остается пустая, что логично. Но файл создается.
Re: SHELL в Asterisk 18
Добавлено: 30 апр 2026, 13:12
ded
Если вас устроит - сначала создайте файл /mnt/disk2/123.txt
а потом через диалплан дописывайте значения в него
echo '456' >> /mnt/disk2/123.txt
Re: SHELL в Asterisk 18
Добавлено: 05 май 2026, 14:39
AlexeyFatnev
Здравствуйте, все.
Ded, Glukinho, Zavr2008: спасибо за ответы, вы никогда не остаетесь в стороне!
Проблема была в доступе к папке. Я сам себя запутал, поэтому не смог быстро выявить проблему. После открытия нужного доступа к соответствующей папке, файлы начали писаться без каких либо изменений в DIALPLAN.
Re: SHELL в Asterisk 18
Добавлено: 07 май 2026, 18:29
Zavr2008
Я так и подумал, как раз запуск bash скрипта под юзером asterisk это бы подтвердил сразу. Вообще это более правильно по соображениям безопасности - в параметры можно делать инъекции, например если это не echo '123' , а какой-нить там CELLERID(num) или CALLERID(name) и передаваемые параметры нужно проверять аналогично как в GET параметрах php.