Я предполагаю, что команда на самом деле выполняется, но она не может подключиться к Asterisk и выполнить команду перезагрузки, поскольку пользователь, работающий с веб-сервером, не имеет разрешения на подключение к Asterisk.
Дварешения.Первый рекомендуется.
sudo
Настройте sudo
, чтобы пользователь веб-сервера мог выполнять определенную команду "asterisk -rx reload
" как пользователь asterisk
:
www-data (asterisk) NOPASSWD: /usr/sbin/asterisk -rx reload
И затем используйте это как команду, которую вы передаете system()
:
system("sudo -u asterisk /usr/sbin/asterisk -rx reload");
разрешения сокета
asterisk -r
использует сокет UNIX-домена для подключения к Asteriskсервер.Расположение сокета может отличаться в зависимости от вашей системы, но ищите что-то вроде /var/run/asterisk.ctl
.По умолчанию разрешения этого сокета, вероятно, установлены так, что только пользователь asterisk
(или root) может подключаться.
Вам необходимо настроить, чтобы пользователь веб-сервера имел разрешение на чтение и запись в этот файл.разъем.Например, вы можете chmod
сокет до a+rwx
, чтобы сделать его доступным для любого пользователя в системе.(Не делайте этого, если у вас есть недоверенные пользователи в системе!) Или вы можете предоставить разрешение на запись группы грантов в этот сокет и chgrp
в группу, в которой работает веб-сервер.
Неважнокак вы это делаете, помните, что вы даете разрешение на выполнение потенциально опасных действий от имени вашего сервера Asterisk.