Я использую сервер Apache с установленным php на моем Raspberry Pi 2 B +. В моем PHP-файле у меня есть код
echo exec("sudo chmod +x gpio.py && sudo python gpio.py 50");
который не работает. Однако когда я запускаю эту же команду в каталоге на локальном компьютере, она работает. Я тоже могу бегать как лс
echo exec("ls");
Команда и это работает, но команда для запуска кода Python не работает. Как я могу решить эту проблему? Этот файл python устанавливает GPIO и устанавливает его в LOW. Любая помощь будет оценена! Спасибо
SUDOER FILE
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
www-data ALL = NOPASSWD: /var/www/bash.sh
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
pi ALL=(ALL) NOPASSWD: ALL
Скорее всего, ваш сервер Apache не имеет достаточных разрешений для выполнения команды. Вы могли бы сделать несколько вещей, добавив www-data
группа в «список sudo». Это доступно в /etc/sudoers
,
Ваша исходная модель может не работать, если группа Apache не имеет полных возможностей sudo. Одним из обходных путей может быть создание сценария оболочки, подобного следующему:
#!/bin/bash
sudo chmod +x gpio.py && sudo python gpio.py 50 2>&1
Затем измените PHP на следующее:
echo exec("/path/to/my/script.sh");
Вы хотели бы добавить что-то вроде этого к /etc/sudoers
файл:
www-data ALL = NOPASSWD: /path/to/my/script.sh
Хотя учтите, что добавление веб-сервера в список sudo обычно не рекомендуется, если вы можете обойти это.
Других решений пока нет …