当我尝试启动屏幕会话没有任何反应.
当我尝试启动一个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访问这个命令返回失败连接到服务器(什么是奇怪的,因为新会话通常应该启动服务器)
>使用shell访问(由于安全原因我不喜欢),但是会话创建完全是我想要的
但还有一些问题:
正如我之前所说,我想创建一些窗口来处理这些进程
命令如下所示:
tmux -S $SocketLocationPath new-window -t "$SessionName" -n "$WindowName" "$cmd"
这个工作只适用于PHP目录中的全局进程(如htop)或进程(如其他脚本)
我想做的是在自己的工作目录中执行一个进程,这个进程不一定在PHP目录中 – >我该怎么改?
我试过的
>将2>& 1添加到每个用于调试的命令 – >没有帮助
>创建没有SocketLocation的会话
>从屏幕切换到tmux,因为它有更简单的语法
>给了www数据访问shell
sudo chsh -s / bin / sh www-data
>在PHP中使用shell_exec,passthrough和exec函数
>使用带-dmS选项的屏幕
可能的解决方案
>给www-data shell访问(安全风险?)或者可能限制对tmux的访问,但是如何?
>禁用PHPs设置只执行PHP目录中的文件(安全风险?)
>添加一些我没有tmux的工具,没有shell:D
>更改一些PHP设置只允许某些目录或甚至是值得吗?
做一些完全不同的事情?
另一个奇怪的事情:当通过PHP启动tmux会话时,终端没有用户,没有位置
通常看起来像用户@ machinename $…
使用PHP它只是看起来像$…没有更多
我希望有人可以帮助我,因为我不喜欢这些凌乱的解决方法:
提前致谢
– 超模糊