tmux セッションが不明なポイントで失われました。原因と考えられる解決策は何ですか?

tmux セッションが不明なポイントで失われました。原因と考えられる解決策は何ですか?

Python Web アプリケーションを確認するために、長時間実行されている tmux セッションに再度接続しようとしていました。しかし、tmux attach実行中のセッションがないと表示され、プロセス (最初の行)psは表示されますtmuxが、番号の代わりに疑問符が表示されますpts

これはどういう意味ですか? この tmux セッションは永久に失われ、その原因は何でしょうか? tmux セッションで生成され、pts/19(2 行目) で実行されている 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

こうやって以前の回答はこちら助けてくれました(すごい!)。解決しようとしていたその通り1つの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スクリプトなどを実行するために を使用する場合、 tmuxsudo に続くアクションは root の下で実行されるため、セッションは sudo を使用したユーザーの下ではなく、root の下にリストされます。

これを解決するには、 を使用するかsudo tmux a、またはtmuxroot として を使用し、tmux セッションの制御を取り戻します。

関連情報