php 正在向错误的 tmux 目录发送命令

php is sending command to the wrong tmux directory

所以基本上,当我按下一个按钮时,我试图将命令发送到我的 csgo 服务器,这样我就可以从任何地方轻松管理。当我按下一个按钮时,下面的 php 代码块是 运行:

    if (isset($_POST['test']))
{
    echo shell_exec("tmux send-keys -t ze \"sv_cheats\" ENTER 2>&1");
}

我的 tmux 会话没有得到任何输入,并且 回声说有 no server running on /tmp/tmux-33/default

我认为正在发生的事情是我的 apache 服务器正在创建它自己的某种 tmux 目录,因为这个文件路径存在:/tmp/systemd-private-cf2b583fac384d89981b15c753c6b8bb-apache2.service-jpCxqB/tmp/tmux-33,这就是它寻找的地方。

我相当确定它需要放在的地方是 /tmp/tmux-1001(其中有一个名为 "default" 的文件),唯一的问题是我不知道如何实现它。

您可以使用 -S 或通过设置 TMUX_TMPDIR 来更改 tmux 与之通信的套接字,例如 tmux -S/tmp/tmux-1001/default send-keys ....

但是,它似乎是 运行 宁作为 UID 33 所以它不能与你的 tmux 服务器(它是 UID 1001)对话,除非你给它在套接字上的权限。请注意,任何有权访问您的 tmux 套接字的用户都可以完全访问您的用户帐户,因此使用与面向 Internet 的服务器进程相同的 UID 共享它是不明智的。

一个更好的方法可能是让 PHP 代码创建一个两个用户都可以读取的临时文件(它需要是一个世界可写的目录,或者 - 更好 - 一个共享的目录)组),然后让 运行 作为您的用户来检查该文件并执行您想要的操作(即使它像在第二个 tmux window 中的 while :; do [ -f /tmp/csgo/mybutton ] && (rm /tmp/csgo/mybutton; tmux send-keys ...); sleep 1; done 一样简单)。