Я предполагаю, что команда на самом деле запущена, но она не может подключиться к Asterisk и выполнить команду перезагрузки, потому что у пользователя, на котором запущен веб-сервер, нет разрешения на подключение к Asterisk.
Два решения. Рекомендуется первая.
Судо
Настройка 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
.
Необходимо, чтобы пользователь веб-сервера имел разрешение на чтение и запись в этот сокет. Например, вы могли бы chmod
сокет для a+rwx
, чтобы сделать его пригодным для использования любым пользователем в системе. (Не делайте этого, если у вас есть ненадежные пользователи в системе!) Или вы можете предоставить разрешение на получение группы грантов для этого сокета, а chgrp
- группе, в которой работает веб-сервер.
Независимо от того, как вы это делаете, имейте в виду, что вы предоставляете разрешение на выполнение потенциально опасных действий от имени вашего сервера Asterisk.
Вы уверены, что эта команда не была выполнена? Возможно, веб-сервер просто не имеет права на перезагрузку asterisk. – Celada
и как я могу дать веб-сервису разрешение на перезагрузку asterisk? нужна помощь. спасибо!!! Я новичок в этом материале –
Какой пользователь выполняет webservice? Вы должны предоставить ему привилегии с помощью команды консоли «chmod + x». –