Я пытался повторно подключиться к долго работающему сеансу tmux, чтобы проверить веб-приложение python. Однако tmux attach
утверждает, что запущенного сеанса нет, и ps
показывает tmux
процесс (первая строка), но с вопросительным знаком вместо номера pts
.
Что это значит — эта сессия tmux навсегда потеряна, и что могло стать причиной этого? Есть ли еще способ посмотреть текущее состояние процесса python, порожденного в сессии tmux и работающего в pts/19
(вторая строка)?
[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
находится PID tmux в вашем листинге.
решение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
Для тех, кто наткнется на эту ветку позже;
If you use sudo
to run a script or something, the tmux
session is listed under root, not under the user who used sudo, since actions following sudo are performed under root.
To remedy this, either use sudo tmux a
, or tmux
as root to regain control of your tmux session.