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


PHP tmux and screen dont behave correctly (no launch, no new session, no new windows)

我在php中遇到tmux/screen问题。
当我尝试启动屏幕会话时,什么也没发生。
当我尝试启动一个tmux会话时,它只工作,如果我给www-data shell访问,即使没有添加窗口:(

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

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

由于它们是在php上运行的,它们是作为www-data用户运行的,所以我不能访问由www-data创建的tmux会话。

所以我有一些建议,当启动窗口/会话:

  • 我有一个命名的会话

    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访问此命令返回连接服务器失败(奇怪的是,因为new-session通常应该启动服务器)

  • 具有shell访问权限(出于安全原因我不喜欢),但是会话是按照我想要的创建的

但仍存在一些问题:

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

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

这只适用于全局进程(如htop)或php目录下的进程(如其他脚本)
我想做的是在自己的工作目录下执行进程不一定在php目录下-> 我怎么改变

What I tried

  • 为每个调试命令添加2>&1 ->没有帮助
  • 创建没有SocketLocation的会话
  • 从屏幕切换到tmux,因为它更容易语法
  • 允许www-data访问shell

    chsh -s/bin/sh www-data

  • 在php中使用shell_exec, passthrough和exec函数

  • 使用-dmS选项的屏幕
<

可能的解决方案/strong>

  • 给www-data shell访问(安全风险?)或者可能限制访问tmux,但如何?
  • 禁用phps只执行php目录下的文件(安全风险?)
  • 给我添加一些未知的tmux选项,可以在没有shell的情况下工作:
  • 改变一些php设置,只允许某些目录,或者这是值得的吗?

  • 做一些完全不同的事情??

另一个奇怪的事情:当通过php启动tmux会话时,终端没有用户和位置
通常看起来像user@machinename$…
在php中,它看起来像$…没有更多

我希望有人能帮助我,因为我只是不喜欢这些乱七八糟的变通方法:/

提前感谢——superfuzzy

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

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

我成功执行了这个序列:

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

如果你不这样做就来烦我