我在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");
如果你不这样做就来烦我