Страница 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} при этом остается пустая, что логично. Но файл создается.