微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我在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访问这个命令返回失败连接到服务器(什么是奇怪的,因为新会话通常应该启动服务器)
>使用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它只是看起来像$…没有更多

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

提前致谢
– 超模糊

经过一些挣扎,帮助googleguy @ freenode#PHP我终于打败了.

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

我执行这个顺序是成功的:

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

告诉我它不适合你

原文地址:https://www.jb51.cc/php/132271.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐