对于我的项目,我正在创建 WEB 界面来控制 Linux 中的 QoS。我正在尝试使用 shell_exec() 函数 PHP 与终端进行通信。如果尝试像这样简单的事情,它就会起作用:
shell_exec("ip link show");
但是如果尝试更改 qdisc(在终端中工作):
shell_exec("sudo tc qdisc replace dev eth0 root pfifo");
什么也没发生。如果我尝试 echo shell_exec(...); ,我也不会得到任何输出;
我运行的是 Ubuntu 14.04。我已经在 sudoers 文件中添加了行,无需密码即可执行 shell 命令:
#includedir /etc/sudoers.d
%www-data ALL=NOPASSWD: /var/www/html
也许我对 sudoers 文件做错了什么,或者在运行 shell_esec 命令之前我还应该做些什么?
最佳答案
%www-data ALL=NOPASSWD: /var/www/html
此 sudoers 行仅允许 www-data
执行文件 /var/www/html
。 (这可能是一个目录,而不是可执行文件,因此它不执行任何操作。)
如果您希望允许 www-data
执行 tc
,您需要在 sudoers 文件中使用可执行文件的完整路径进行指定。
关于php - shell_exec() 不会改变 Linux 中的 qdisc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36807642/