PHP tmux和屏幕行为不正确(没有启动,没有新会话,没有新窗口)

问题描述 投票:10回答:1

我在php中遇到tmux / screen问题。 当我尝试启动屏幕会话时没有任何反应。 当我尝试启动一个tmux会话时,它只有在我给www-data shell访问时才有效,即便没有添加窗口:(

我想要实现的目标: 我想为我在虚拟机上运行的某些进程编写Web界面代码。 为此,我写了一些脚本(因为我在linux debian机器上,所以在bash中)。 这些脚本需要做一些事情: - 启动一个新的tmux窗口(如果它还不存在,则启动会话) - 查看tmux窗口是否正在运行/活动 - 停止进程(自动关闭窗口) 并手动执行(在终端中)这些脚本的行为符合要求。

现在,webinterface将启动这些脚本(因此它们将通过php中的exec函数执行)。

由于它们运行在php上,因此它们以用户www-data运行,因此我无法访问由www-data创建的tmux会话。

所以我在启动Window / session时有一些建议:

  • 我有一个命名会话 tmux new-session -s $ SessionName
  • 它需要从php开始分离 tmux new-session -d -s $ SessionName
  • 我希望能够以超级用户身份访问会话 - >我必须定义一个socketlocation tmux -S $ SocketLocationPath new-session -d -s $ SessionName

所以我的命令最终看起来像这样:

tmux -S /tmp/pairedsession.socket new-session -d -s "ProcessGroup1"

此命令有问题:

  • 没有shell访问权限,此命令返回无法连接到服务器(因为新会话通常应该启动服务器,所以很奇怪)
  • shell访问(出于安全原因我不喜欢)然而会话是按照我想要的方式创建的

但仍有一些问题:

正如我之前所说,我想创建一些窗口来处理进程 该命令如下所示:

tmux -S $SocketLocationPath new-window -t "$SessionName" -n "$WindowName" "$cmd"

这适用于但只适用于全局进程(如htop)或php目录中的进程(与其他脚本一样) 我想要做的是在自己的工作目录中执行一个进程,该目录不一定在php目录中 - >我如何改变它

我尝试了什么

  • 为每个调试命令添加2>&1 - >没有帮助
  • 在没有SocketLocation的情况下创建会话
  • 从屏幕切换到tmux,因为它具有更简单的语法
  • 给了shell的www-data访问权限 sudo chsh -s / bin / sh www-data
  • 在php中使用shell_exec,passthrough和exec函数
  • 使用带-dmS选项的屏幕

可能的解决方案

  • 给www-data shell访问(安全风险?)或者可能限制对tmux的访问但是如何?
  • 禁用phps设置只执行php目录中的文件(安全风险?)
  • 添加一些没有shell的未知tmux选项:D
  • 更改一些PHP设置只允许某些目录或甚至值得吗?
  • 做点完全不同的事情???

另一个奇怪的事情:当通过php启动tmux会话时,终端没有用户也没有位置 通常它看起来像user @ machinename $ ... 使用PHP它看起来只是$ ...仅此而已

我希望有人可以帮助我,因为我不喜欢这些凌乱的解决方法:/

提前谢谢 - 超级模糊

php bash apache tmux gnu-screen
1个回答
3
投票

经过一番挣扎,借助googleguy @ freenode #php,我终于打败了这个。

事实证明,PHP 7.1(在我的情况下)根本没有这样的问题。

我成功执行了这个序列:

shell_exec("tmux new-session -s session_name -d");
shell_exec("tmux send -t session_name gedit ENTER");

戳我,它不适合你

© www.soinside.com 2019 - 2024. All rights reserved.