Program Tip

세션을 나열하려고 할 때 tmux에서 "서버에 연결하지 못했습니다"메시지가 표시되는 이유는 무엇입니까?

programtip 2020. 12. 14. 20:46
반응형

세션을 나열하려고 할 때 tmux에서 "서버에 연결하지 못했습니다"메시지가 표시되는 이유는 무엇입니까?


나에게 일어나는 일은 다음과 같습니다 . tmux -L name1, tmux -L name2;를 사용하여 tmux 세션을 시작합니다 . 그런 다음 ctrl+ B+를 사용하여 분리합니다 d. 그런 다음 내 컴퓨터에서 현재 실행중인 세션 목록을 가져 오려고합니다. 그러나를 실행 tmux ls하면 오류 메시지가 나타납니다.

failed to connect to server: Connection refused

이것은 버그입니까? 저는 화면에 익숙합니다. screen -ls세션을 시작하고 다음에 연결할 때 몇 주 동안 실행 상태로 둘 수 있으므로 매우 유용한 기능으로 간주 됩니다. 이 때문에 현재 실행중인 tmux 세션을 나열하는 기능은 저에게 매우 중요합니다. tmux lstmux가 실행 중이라는 것을 알고 있는데 "연결 거부"오류를 반환합니까?


시도해보십시오 tmux -L name1 list-session.


SIGUSR1요약 : tmux 서버 프로세스에 신호를 보내보십시오 .

제 경우에는 약 8 일 동안 활동이없는 후 다시 첨부 할 수 없었습니다.

$ tmux attach
no sessions

그러나 tmux 프로세스에 대한 grep은 다음과 같은 결과를 얻었습니다.

$ ps -aef | fgrep -i tmux
hari     7139     1  1  2016 ?        2-20:32:31 tmux
hari    25943 25113  0 22:00 pts/0    00:00:00 fgrep --color=auto -i tmux

@ 7heo.tk에 의해 제안으로,이 TMUX 서버가 계속 실행 중이지만을 나타냅니다 tmux ls주고 있었다 failed to connect to server: Connection refused오류가 발생했습니다. tmux 세션에 속한 tmp 디렉토리가 존재하고 lsof -p 7139(tmux 서버의 pid) 소켓 파일이 열려 있음을 확인했습니다.

COMMAND  PID  USER   FD   TYPE             DEVICE SIZE/OFF       NODE NAME
tmux    7139 hari    5u  unix 0x0000000000000000      0t0 1712879255 /tmp/tmux-50440/default

또한 -S /tmp/tmux-50440/defaulttmux에 명시 적으로 지정하려고 시도했지만 도움이되지 않았습니다. 그러나 tmux man 페이지에서 전송 SIGUSR1하면 tmux가 소켓 파일을 다시 만들 수 있다는 내용을 읽었으므로 시도해 보았고 즉시 세션을 찾아 다시 연결할 수있었습니다.

$ kill -s USR1 7139
$ tmux ls
0: 12 windows (created Mon Apr 18 21:17:55 2016) [198x62]

이것은 실행중인 세션이 없을 때 발생합니다. 방금 tmux를 사용하기 시작했지만 컴퓨터를 다시 시작하면 처음에는 나를 놀라게 한 세션이 손실된다는 사실을 깨닫지 못했습니다.

같은 생각을하는 분들을 위해 : 재부팅 후 tmux 세션 복원 . 게시물 요약 : 쉘 스크립트를 사용하여 tmux 세션을 빌드하거나 멋진 쉘 히스토리 추적기를 작성하십시오 .


열려있는 세션이 없으면 실제로이 오류가 발생합니다. 열려있는 세션이 없으면 실행중인 tmux 서버가 없으므로 연결할 수 없습니다.

-L옵션을 사용하면 tmux 서버가 사용하는 소켓 이름을 변경하지만 세션 이름을 지정하는 방법이 아닙니다. 다음 명령을 사용하는 것이 좋습니다.

tmux new -s name1
tmux new -s name2

이렇게하면 기본 소켓 이름으로 서버에 2 개의 세션이 생성됩니다. 이제 다음을 수행 할 수 있습니다.

$ tmux ls
name1: 1 windows (created Mon Sep 22 10:34:40 2014) [158x40] (attached)
name2: 1 windows (created Mon Sep 22 10:34:43 2014) [158x40] (attached)

그리고 기본 소켓의 서버에서 실행중인 모든 세션을 볼 수 있습니다. 다음을 사용하여 이들 중 하나를 다시 연결할 수 있습니다.

tmux attach -d -s name1

-s세션 이름을 지정하여
-d이전 클라이언트에서 분리합니다 (연결된 경우).

choose-tree기본적으로 키 입력 C-s(접두사 키 + s)에 할당 된 명령을 사용하여 tmux 내에서 세션간에 전환 할 수도 있습니다 . 이것이 제가 보통하는 일입니다.


This happened to me when the Ubuntu desktop crashed and my gnome-terminal windows exited. I could still see the tmux process was running (ps aux | grep tmux) but for some reason tmux commands would not work to list the existing sessions. Apparently it wasn't finding the existing Unix socket of the still-running tmux process. The fix in this scenario is to locate the existing Unix socket and specify that to tmux using the -S flag; here's how:

You can find the PID of your still-running tmux process with this:

ps -p $(pidof tmux)

Now take your PID (in my case, 6876) and run this to list any open Unix sockets:

sudo lsof -Uap 6876

Hopefully you see output like this:

COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
tmux    6876  abe    3u  unix 0x0000000000000000      0t0 408477 socket
tmux    6876  abe    4u  unix 0x0000000000000000      0t0 408478 socket
tmux    6876  abe    6u  unix 0x0000000000000000      0t0 408479 /tmp/tmux-1000/default

Now you can specify that existing Unix socket to your tmux command (using the -S flag), and you should be able to list-sessions and attach properly:

tmux -S /tmp/tmux-1000/default list-sessions
tmux -S /tmp/tmux-1000/default attach -t 0

You may have an error in your .tmux.conf. I had this problem until i took out this line from my .tmux.conf:

set-window-option -g xterm-keys on

You could also try tmux -v and then look at the logs it prints.


One easy fix is to delete the tmp files left by the tmux server, for example, by doing $ rm -rf /tmp/tmux-xxx/.


The way TMUX(1) works is by having a client process (tmux) connect to a server process (tmux too, but not attached to a TTY), as shown in the following ps output:

  PID TTY      STAT   TIME COMMAND
19229 pts/1    S+     0:00 tmux
19231 ?        Ss     0:00 tmux

That shows that the client actually starts before the server (one could assume it forks it).


After detach/re-attach, the same ps command outputs:

  PID TTY      STAT   TIME COMMAND
19231 ?        Ss     0:00 tmux
19290 pts/1    S+     0:00 tmux attach

This shows the tmux client as tmux attach, thus being a bit easier to understand.


Now, if we look at the output of pstree in both of the above cases, we get in both cases (ignoring the pid change for tmux attach):

pstree -p
init(1)─┬─acpid(1824)
        ├─cron(1859)
        ├─sh(14146)───tmux(19229)
        └─tmux(19231)───sh(19233)───pstree(19234)

Clearly showing that the commands typed (pstree in this case) in the client process (PID 19229) get executed by the server one (PID 19231), thus allowing them to continue without SIGHUP in the event where the client terminal is lost (over ssh, for example).


Now, to the question OP asked: what happens in the case where tmux returns failed to connect to server: Connection refused is that the server process (pid 19231 in our case) is unreachable, whatever the reason (it can be because the server process died; but also because the user executing the tmux client doesn't have the permissions to access the tmux socket, etc.)

The solution in that case is to grep for the tmux processes (via ps for example), and pray that you didn't get this error because the server died (so you can attach to it by using lsof to get what sockets it listens to). Otherwise, there is no way to attach to the server, as it is as dead as after a reboot.


TL;DR:

This error can be given for multiple reasons, ranging from bug to critical failure (program died). In a nutshell, use the UNIX tools at your disposal to determine what socket does tmux use, if it is still running (there should be at least two processes if you have the tmux client running - that happens after invoking tmux or tmux attach from the shell) and thus if you lost your session or not.

Note: as other answers pointed out, if the reason for this error to be shown is a socket error, you can use the -L flag to tell tmux to use a specific socket.


I was using another program inside of tmux (reattach-to-user-namespace), and I was getting this error when I switched computers because reattach-to-user-namespace was not installed. The fix was to simply run brew install reattach-to-user-namespace.


This may happen if you or any cleaning process delete files in /tmp/*. All your sessions data are lost if you can't recover those files. Killing all tmux instances and restart it is the only choice left, unfortunately.

참고URL : https://stackoverflow.com/questions/9668763/why-am-i-getting-a-failed-to-connect-to-server-message-from-tmux-when-i-try-to

반응형