セッションを一覧表示しようとすると、tmuxから「サーバーへの接続に失敗しました」というメッセージが表示されるのはなぜですか?

StackOverflow https://stackoverflow.com//questions/9668763

  •  12-12-2019
  •  | 
  •  

質問

これが私に何が起こっているのかです:を使用してtmuxセッションを開始します tmux -L name1, tmux -L name2;次に、私はそれらを使用してデタッチします ctrl+B+d.それから私は自分のコンピュータ上で現在実行中のセッションのリストを取得しようとします。しかし、私が走ったとき tmux ls, 、私はエラーメッセージが表示されます:

failed to connect to server: Connection refused

これはバグですか?私はscreenに精通しています;私は考えています screen -ls 私はセッションを開始し、私はそれに接続する次回の前に数週間のために実行されているままにすることができるので、非常に便利な機能として。このため、現在実行中のtmuxセッションをリストする機能は私にとって非常に重要です。なぜですか tmux ls tmuxが実行されていることがわかっているときに「接続が拒否されました」エラーを返しますか?

役に立ちましたか?

解決

tmux -L name1 list-sessionを試してください。

他のヒント

tl; dr: TMUXサーバプロセスにSIGUSR1信号を送信してみてください。

私の場合は、約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 lsfailed 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/defaultをTMUXに明示的に指定しようとしましたが、それは役に立ちませんでした。ただし、SIGUSR1を送信するTMUX Manページでは、TMUXがソケットファイルを再作成するように読んでください。したがってみましたが、すぐにセッションとReAttachを見つけることができました。

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

これは私にセッションを実行していないときに私に起こります。私はTMUXを使い始めていて、あなたがあなたのコンピュータを再起動したならば、あなたが私を最初に驚かせたあなたのセッションを失いました。

同じことを考えている人のために:再起動後のTMUXセッションの復元。POSTの概要:シェルスクリプトを使用してTMUXセッションを構築するか、またはファンシーシェル履歴トラッカー

セッションが開いていない場合は、このエラーが発生します。セッションが開いていない場合は、TMUXサーバーが実行されていないため、接続できません。

-Lオプションを指定すると、TMUX Serverが使用するソケット名を変更すると、セッションに名前を付ける方法ではありません。次のコマンドを使用するには、次のコマンドを使用します。

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)
.

およびデフォルトソケットのサーバー上で実行されているすべてのセッションが表示されます。あなたはそれらのうちの1つを使って再現することができます:

tmux attach -d -s name1
.

-sセッションの名前を指定します。 -dはそれを以前のクライアントから切り離します(接続されている場合)

デフォルトでは、keystroke choose-tree(プレフィックスキー+ S)に割り当てられているC-sコマンドを使用してTMUX内のセッションを切り替えることもできます。これが私が普段していることです。

これは、Ubuntuデスクトップがクラッシュし、私のgnome-terminalウィンドウが終了したときに私に起こりました。私はまだtmuxプロセスが実行されているのを見ることができました(ps aux | grep tmux)しかし、何らかの理由でtmuxコマンドは既存のセッションを一覧表示するために機能しません。どうやら、まだ実行中のtmuxプロセスの既存のUnixソケットを見つけていなかったようです。このシナリオでの修正は、既存のUnixソケットを見つけて、tmuxに指定することです。 -S 旗;ここではどのようにです:

まだ実行中のtmuxプロセスのPIDを次のように見つけることができます:

ps -p $(pidof tmux)

今すぐあなたのPID(私の場合は6876)を取り、これを実行して開いているUnixソケットを一覧表示します:

sudo lsof -Uap 6876

うまくいけば、次のような出力が表示されます:

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

これで、tmuxコマンドに既存のUnixソケットを指定することができます(使用して、tmuxコマンドに既存のUnixソケットを指定できます -S フラグ)、およびセッションをリストして適切に添付できるはずです:

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

.tmux.confにエラーがある可能性があります。私が私の.tmux.confからこの行を取り出したまでこの問題を抱えていました:

set-window-option -g xterm-keys on
.

tmux -vを試すこともでき、それが印刷するログを見てください。

1つの簡単な修正は、例えば、$ rm -rf /tmp/tmux-xxx/を実行することによって、TMUXサーバによって残されたTMPファイルを削除することです。

次のTMUX(1)の出力に示すように、Cirginal Process(tmux)をサーバープロセス(tmux)に接続することで、サーバープロセス(ps、TTYには添付されていません)を持つことで、

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

それは、クライアントがサーバーの前に実際に起動したことを示しています(フォークがフォークすると仮定することができる)。


デタッチ/再接続後、同じpsコマンド出力:

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

これはTMUXクライアントをtmux attachとして示しているため、わかりやすくなります。


現在の場合の両方の場合において、pstreeの出力を見ると、どちらの場合(pidtmux attachの変更を無視します):

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

は、クライアントプロセス(PID pstree)で入力されたコマンド(この場合は19229)がサーバー1で実行されます(PID 19231)ことが sighup クライアント端末が紛失した場合(たとえばSSH経由)。


質問OP氏は、tmuxfailed to connect to server: Connection refusedを返す場合に何が起こるか、サーバープロセス(私たちの場合のPID 19231)がどんな理由であっても(サーバープロセスが亡くなったためです。) tmuxクライアントを実行するユーザーは、TMUXソケットなどにアクセスする権限を持っていないためです。)

その場合解決策は、grepプロセス(例えば、tmuxを介して)のpsであり、サーバが疑問があるためにこのエラーが発生しなかったことを祈る(そこでlsofを使用してソケットを取得することで添付することができる)。聴きます)。それ以外の場合は、再起動後のようにデッドのように、サーバーに attach>を添付する方法はありません。


TL; DR:

このエラーは、バグからクリティカル障害までの範囲の複数の理由で与えることができます(プログラムが亡くなりました)。 Nutshellでは、廃棄時にUNIXツールを使用して、tmuxがまだ実行されているのかを判断します(TMUXクライアントが実行されている場合は少なくとも2つのプロセスがあるはずです。したがって、あなたがあなたのセッションを失った場合、またはそうでなければ。

注意:他の回答が指摘されると、このエラーが表示された理由がソケットエラーである場合は、tmuxフラグを使用して、特定のソケットを使用するようにtmux attachに指示することができます。

私はTMUXの内部に別のプログラムを使用していました(ReatTach-to-user-namespace)、ReatTach-to-user-namespaceがインストールされていないため、コンピュータを切り替えたときにこのエラーが発生しました。修正は、単にbrew install reattach-to-user-namespaceを実行することでした。

これは、/tmp/*内のファイルを削除した場合にも発生する可能性があります。これらのファイルを回復できない場合は、すべてのセッションデータが失われます。すべてのTMUXインスタンスを殺して再起動することは残念ながら残された唯一の選択肢です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top