shell_exec() 不会更改 linux 中的 qdisc
shell_exec() doesn't change qdisc in linux
对于我的项目,我正在创建 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 命令之前我还应该做些什么?
这不是确切的答案,但请这样尝试。它对我有用。
2>&1
产生错误信息。
if(exec("sh whatever your cammand 2>&1", $output, $return_var))
{
print_r($output);
exit;
}
%www-data ALL=NOPASSWD: /var/www/html
该 sudoers 行只允许 www-data
执行文件 /var/www/html
。 (这可能是一个目录,而不是一个可执行文件,所以它什么都不做。)
如果您想允许 www-data
执行 tc
,您需要在 sudoers 文件中指定,使用可执行文件的完整路径。
对于我的项目,我正在创建 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 命令之前我还应该做些什么?
这不是确切的答案,但请这样尝试。它对我有用。
2>&1
产生错误信息。
if(exec("sh whatever your cammand 2>&1", $output, $return_var))
{
print_r($output);
exit;
}
%www-data ALL=NOPASSWD: /var/www/html
该 sudoers 行只允许 www-data
执行文件 /var/www/html
。 (这可能是一个目录,而不是一个可执行文件,所以它什么都不做。)
如果您想允许 www-data
执行 tc
,您需要在 sudoers 文件中指定,使用可执行文件的完整路径。