Php exec命令不会执行

时间:2016-12-21 08:40:43

标签: php linux exec tmux

我正在尝试创建一个tmux会话,并通过php运行其他一些命令。

当我从web运行脚本时,它不会执行命令,但是当我使用" php test.php"从终端运行脚本时它有效。

我尝试将cmds作为sudo运行并关闭www-data的sudo传递。但命令仍然无法执行。

脚本:

$array_output = array();
$cmd = "sudo tmux new-session -s Server-17 -d ENTER 2>&1";
$output = shell_exec($cmd);
array_push($array_output, $output);
$cmd = "sudo tmux send -t Server-17 'cd /home/Minecraft/Servers/1/17/' ENTER 2>&1";
$output = shell_exec($cmd);
array_push($array_output, $output);
$cmd = "sudo tmux send -t Server-17 'chmod +x start_script.sh' ENTER 2>&1";
$output = shell_exec($cmd);
array_push($array_output, $output);
$cmd = "sudo tmux send -t Server-17 'sh start_script.sh' ENTER 2>&1";
$output = shell_exec($cmd);
array_push($array_output, $output);
var_dump($array_output);

输出:

array (size=4)
  0 => null
  1 => string 'failed to connect to server
' (length=28)
  2 => string 'failed to connect to server
' (length=28)
  3 => string 'failed to connect to server
' (length=28)

2 个答案:

答案 0 :(得分:0)

取自:How to make a system call remotely?

Apache的用户www-data需要被授予使用sudo执行某些应用程序的权限。

  1. 运行命令sudo visudo。实际上我们想要在etc/sudoers中编辑文件。为此,通过在终端中使用sudo visudo,它会复制(临时)sudoers文件进行编辑。
  2. 在文件的末尾,添加以下ex: - 如果我们想要使用命令重新启动smokeping而将mount命令用于其他操作,
  3. www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, /bin/mount

    (假设您希望使用超级用户运行restartmount命令 (root)特权。)

    但是,如果您希望使用每个应用程序运行 超级用户权限,然后添加以下内容而不是上面的内容。您可能不想这样做,而不是ALL命令,非常危险。

    www-data ALL=NOPASSWD: ALL
    

    3. 编辑sudoers文件后(visudo编辑sudoers的临时文件,保存并退出临时文件(visudo)以写入sudoers文件。 (wq!

    4.就是这样,现在在exec()脚本中以下列方式使用xxx.php请记住在php脚本中使用命令之前使用sudo。< /强>

    例如: -

    exec ("sudo /etc/init.d/smokeping restart 2>&1");
    

    因此,在您的问题中,将我希望使用的命令添加到step no (2.),因为我添加并更改您想要的PHP脚本。

答案 1 :(得分:0)

尝试shell_exec并检查返回。

您也可以使用sudo访问权限: this