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
スクリプトなどを実行するために を使用する場合、 tmux
sudo に続くアクションは root の下で実行されるため、セッションは sudo を使用したユーザーの下ではなく、root の下にリストされます。
これを解決するには、 を使用するかsudo tmux a
、またはtmux
root として を使用し、tmux セッションの制御を取り戻します。