我正在尝试创建一个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)
答案 0 :(得分:0)
取自:How to make a system call remotely?
Apache的用户www-data
需要被授予使用sudo
执行某些应用程序的权限。
sudo visudo
。实际上我们想要在etc/sudoers
中编辑文件。为此,通过在终端中使用sudo visudo
,它会复制(临时)sudoers
文件进行编辑。 www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, /bin/mount
(假设您希望使用超级用户运行restart
和mount
命令
(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