要約:sshから切断するとtmuxセッションが停止する理由を理解しようとしています。
詳細:
Arch Linuxシステムにtmuxをインストールしています。tmuxセッションを開始すると、sshセッションがアクティブな間に、セッションをデタッチしてから再度アタッチできます。しかし、sshセッションを終了すると、tmuxセッションは強制終了されます。
sshセッションが終了してもtmuxセッションが実行され続け、新しいssh接続を確立した後にtmuxセッションに接続できる他のシステムがあるため、これは通常の動作ではないことを知っています。問題のあるシステムと正しく動作するシステムの構成は非常に似ているため、何を確認すればよいかわかりません。
tmuxバージョン1.9aを実行しています。問題のあるシステム(ルートアクセス権がある)にはLinuxカーネルバージョン3.17.4-1があり、正常に動作するシステムにはカーネルバージョン3.16.4-1-ARCHがあります(ルートにアクセスできません)システム)。カーネルバージョンが問題の原因であるとは思いませんが、それは私が気づいた違いの1つにすぎません。
私は誰かが同様の問題を見て、可能な解決策を知っているかどうかを確認したいと思った。
問題につながる正確な手順は次のとおりです。
- sshからマシン
tmux
tmuxを起動するために実行しますctrl-B D
デタッチする(この時点で、再アタッチできましたtmux attach
- sshセッションを閉じます(この時点でtmuxセッションは強制終了されます。別の端末でrootとしてログインしているときにこれを確認できました)
- sshで再接続して実行する
tmux attach
と、メッセージが表示されno sessions
て実行tmux ls
が戻りますfailed to connect to server: Connection refused
。サーブが実行されていないため、これは理にかなっています。私にとって意味がないのは、sshセッションから切断すると、手順4で強制終了される理由です。
痕跡データ:
コメントの1つに応えて、straceを使用して、tmuxサーバープロセスが呼び出すシステムを確認しました。sshセッションを(入力exit
またはを使用してctrl-d
)終了すると、tmuxプロセスが強制終了されているように見えます。strace出力の最後の部分のスニペットを次に示します。
poll([{fd=4, events=POLLIN}, {fd=11, events=POLLIN}, {fd=6, events=POLLIN}], 3, 424) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
--- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=1, si_uid=0} ---
sendto(3, "\17", 1, 0, NULL, 0) = 1
+++ killed by SIGKILL +++
これをtmuxが正常に動作する別のシステムと比較しました。そのシステムでは、終了した後もtmuxプロセスが実行され続けます。そのため、根本的な原因は、sshセッションを閉じたときにtmuxプロセスが終了しているようです。トラブルシューティングに時間を費やして理由を特定する必要がありますが、straceの提案が有用だったため、質問を更新すると思いました。