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

sup*_*zzy 10 php apache bash gnu-screen tmux

我在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"
Run Code Online (Sandbox Code Playgroud)

此命令有问题:

  • 没有shell访问权限,此命令返回无法连接到服务器(因为新会话通常应该启动服务器,所以很奇怪)

  • shell访问(出于安全原因我不喜欢)然而会话是按照我想要的方式创建的

但仍有一些问题:

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

tmux -S $SocketLocationPath new-window -t "$SessionName" -n "$WindowName" "$cmd"
Run Code Online (Sandbox Code Playgroud)

这只适用于全局进程(如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会话时,终端没有用户也没有位置
通常它看起来像用户@ machinename $ ...
使用php它只是看起来像$ ...没有更多

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

提前谢谢 - 超级模糊

Off*_*nso 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");
Run Code Online (Sandbox Code Playgroud)

戳我吧,它对你不起作用