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目录中 - > 如何使用我改变了
我尝试了什么
给了shell的www-data访问权限
sudo chsh -s/bin/sh www-data
在php中使用shell_exec,passthrough和exec函数
可能的解决方案
更改一些PHP设置只允许某些目录或甚至值得吗?
做点完全不同的事情???
另一个奇怪的事情:当通过php启动tmux会话时,终端没有用户也没有位置
通常它看起来像用户@ machinename $ ...
使用php它只是看起来像$ ...没有更多
我希望有人可以帮助我,因为我不喜欢这些凌乱的解决方法:/
提前谢谢 - 超级模糊
经过一番挣扎,在 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)
戳我吧,它对你不起作用