70

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

failed to connect to server: Connection refused

これはバグですか?私は画面に精通しています。screen -lsセッションを開始して、次に接続する前に数週間実行したままにする可能性があるため、非常に便利な機能だと思います。このため、現在実行中のtmuxセッションを一覧表示する機能は私にとって非常に重要です。tmuxが実行されていることがわかっているのに、なぜtmux ls「接続が拒否されました」というエラーが返されるのですか?

4

10 に答える 10

78

TL;DR: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 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 を指定しようとしましたが、役に立ちませんでした。ただし、送信するとtmuxがソケットファイルを再作成することになるtmuxのmanページを読んだSIGUSR1ので、それを試してみたところ、すぐにセッションを見つけて再接続することができました。

$ kill -s USR1 7139
$ tmux ls
0: 12 windows (created Mon Apr 18 21:17:55 2016) [198x62]
于 2017-01-02T06:16:28.790 に答える
19

セッションが開いていない場合、実際にこのエラーが発生します。開いているセッションがない場合、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内のセッションを切り替えることもできます。これは私が通常行うことです。

于 2014-09-22T08:43:18.607 に答える
9

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

set-window-option -g xterm-keys on

tmux -vまた、印刷されたログを試して確認することもできます。

于 2013-03-17T16:40:22.017 に答える
6

簡単な修正方法の 1 つは、tmux サーバーが残した tmp ファイルを削除することです。たとえば、$ rm -rf /tmp/tmux-xxx/.

于 2015-01-12T20:38:42.240 に答える
6

次の出力に示すようにTMUX(1)、クライアント プロセス ( tmux) をサーバー プロセス (tmuxこれも TTY に接続されていません) に接続することによって機能します。ps

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

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


デタッチ/再アタッチ後、同じpsコマンドで次のように出力されます。

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

これは tmux クライアントを として示してtmux attachいるため、少し理解しやすくなっています。


ここでpstree、上記の両方のケースで の出力を見ると、両方のケースで得られます ( のpid変更を無視しますtmux attach)。

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

pstreeクライアント プロセス (この場合) に入力されたコマンド (この場合) がサーバー プロセス (PID 19229) によって実行されることを明確に示しているため、クライアント ターミナルが失われた場合 (たとえば ssh 経由) にSIGHUP19231なしでコマンドを続行できます。 )。


ここで、OP が尋ねた質問に対して: サーバー プロセス (私たちの場合は pid 19231) が到達不能である場合に何が起こるかtmux(failed to connect to server: Connection refusedサーバー プロセスが停止したためである可能性があります。また、ユーザーが実行しているために、tmuxクライアントに tmux ソケットにアクセスする権限がないなど)。

その場合の解決策は、grep(たとえばtmux経由psで) プロセスを処理し、サーバーが停止したためにこのエラーが発生しないことを祈ることです (したがって、使用lsofしてリッスンするソケットを取得することで接続できます)。そうしないと、再起動後と同じように機能しなくなるため、サーバーに接続する方法がありません。


TL;DR:

このエラーは、バグから重大な障害 (プログラムの停止) まで、さまざまな理由で発生する可能性があります。簡単に言えば、UNIX ツールを自由にtmux使用して、ソケットがまだ実行されている場合 (tmux クライアントを実行している場合は、少なくとも 2 つのプロセスが必要です。これは、呼び出し後tmuxまたはtmux attachシェルから発生します)、したがって、ソケットが使用するものを決定します。セッションを失ったかどうか。

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

于 2015-05-13T09:52:14.220 に答える
3

これは、ユーザーまたはクリーニング プロセスで .xml ファイルを削除した場合に発生する可能性があります/tmp/*。これらのファイルを回復できない場合、すべてのセッション データが失われます。残念ながら、すべての tmux インスタンスを強制終了して再起動するしかありません。

于 2016-02-10T15:18:07.363 に答える
-3

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

于 2012-03-12T18:16:02.743 に答える