tmux 会话在未知的点中丢失,原因和可能的解决方案?

tmux 会话在未知的点中丢失,原因和可能的解决方案?

我试图重新附加到长时间运行的 tmux 会话来检查 python Web 应用程序。但是tmux attach声称没有正在运行的会话,并ps显示一个tmux进程(第一行),但带有问号而不是数字pts

这意味着什么——这个 tmux 会话是否永久丢失?可能是什么原因导致的?是否还有办法查看在 tmux 会话中生成并在pts/19(第二行)中运行的 python 进程的当前状态?

[mhermans@web314 ~]$ ps -ef | grep mhermans
mhermans 16709     1  0 Mar04 ?        00:26:32 tmux
mhermans  8526 16710  0 Mar04 pts/19   00:20:04 python2.7 webapp.py
root      9985  6671  0 10:18 ?        00:00:00 sshd: mhermans [priv]
mhermans 10028  9985  0 10:18 ?        00:00:00 sshd: mhermans@pts/16
mhermans 10030 10028  0 10:18 pts/16   00:00:00 -bash
mhermans 16247 10030  6 10:28 pts/16   00:00:00 ps -ef
mhermans 16276 10030  0 10:28 pts/16   00:00:00 grep mhermans
mhermans 16710 16709  0 Mar04 pts/19   00:00:00 -bash
mhermans 16777 16709  0 Mar04 pts/21   00:00:00 -bash

答案1

解决方案由Webfaction 支持

由于进程仍在运行,问题是套接字被删除,可能是由清除的 tmp 目录引起的。

根据tmux地图:

如果套接字被意外删除,SIGUSR1 信号可能会被发送到 tmux 服务器进程以重新创建它。

因此发送信号并附加工作:

killall -s SIGUSR1 tmux
tmux attach

答案2

终端缺席是分离会话的标志。您tmux可以这样找到所有会话名称:

ls $TMP/tmux-$(id -u)或者ls /var/run/tmux/tmux-$(id -u)

——这有点依赖于发行版。几乎独立于发行版(并且更核心)的是:

lsof -n -p 16709 -a -U

16709您列表中 tmux 的 PID 位于何处。

答案3

就是这样这个之前的答案在这里帮助了我(哇!)。我试图解决确切地我连接到一个 Tmux 的情况——我可以在 中看到tmux ls在 中ps,我还可以看到其他tmux,它没有列出,tmux ls因此我无法通过使用它的名称附加到它(tmux attach -t myOldbas)

以下是完整的详细信息。流程:

71358     1849  9617  0 Sep04 pts/29   00:00:00 /bin/bash
71358     2528  9617  0 Aug31 pts/25   00:00:00 /bin/bash
71358     9617     1  0 Aug31 ?        00:08:55 tmux new -s myOld
71358     9618  9617  0 Aug31 pts/20   00:00:00 /bin/bash
71358    20199 33189  0 Sep16 pts/27   00:00:00 vim log
71358    20415 32257  0 Sep16 pts/30   00:00:00 /bin/bash
71358    24735 32257  0 Sep16 pts/33   00:00:00 /bin/bash
71358    32257     1  0 Sep16 ?        00:04:02 tmux new -s myses

现在,lsof 位真正帮助了我——当你这样做的时候两个过程,在我的例子中是 32257(我能看到的)和 9617(旧的)

/usr/sbin/lsof -n -p 32257 -a -U
COMMAND   PID             USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
..
tmux    32257 uzer.buzer          7u  unix 0xffff881ff0c73480      0t0 995795763 /tmp/uzer.buzer/tmux-71358/default

然而,当我在旧的 PID 上使用时,我看到了以下内容

/usr/sbin/lsof -n -p 9617 -a -U

tmux    9617 uzer.buzer          7u  unix 0xffff881ff0c73480      0t0 995795763 /tmp/tmux-71358/default

注意,最后一个套接字路径有何不同? 幸运的是,这就是我所需要的,然后我使用显式套接字执行了附加命令:

tmux -S /tmp/tmux-71358/default at

我在里面!

答案4

对于以后遇到此线程的人;

如果您用于sudo运行脚本或其他内容,则tmux会话会在 root 下列出,而不是在使用 sudo 的用户下列出,因为 sudo 之后的操作是在 root 下执行的。

要解决此问题,请使用sudo tmux a, 或tmux作为 root 重新获得对 tmux 会话的控制。

相关内容