tmuxで多重端末

回線が切れると、作業も死ぬ

SSH で入って長い処理を始めたとします。パッケージの更新、大きなファイルの転送、データベースの移行。そこで回線が切れると、実行中のコマンドごと道連れになります。ノートを閉じただけでも同じです。

原因は親子関係にあります。打ったコマンドは、その SSH セッションの子として動いています。親が消えれば子も終わらされます。転送の途中で死ねば、中途半端なファイルだけが残ります。

解決は、接続とは別の場所でコマンドを動かすことです。そのための道具が tmux です。

セッションを作って、そこに住む

tmux new -s deploy

-s はセッションに付ける名前です。実行すると画面が切り替わり、下に横帯が出ます。ここから先で打つコマンドは、SSH ではなく tmux の子になります。

名前を付けるのは、あとで戻るときに指定するためです。省略すると 01 という番号になり、複数あると見分けが付かなくなります。

離れて、戻る

離れるときは Ctrl-b を押してから d です。Ctrl-b は tmux への合図で、続けて押すキーが命令になります。d は detach、離れるという意味です。

離れても中身は動き続けます。SSH を切っても、ノートを閉じても同じです。あとで入り直して戻れます。

tmux ls # deploy: 1 windows (created Fri Aug 8 12:00:00 2026) tmux attach -t deploy

ls で一覧、attach -t <名前> で戻ります。離れている間に終わった処理の出力も、そのまま残っています。

スクリプトから使う

人が操作しないときは、画面を開かずにセッションを作れます。

tmux new -d -s deploy

-d を付けると、作るだけで中に入りません。中のセッションへコマンドを送るには send-keys を使います。

tmux send-keys -t deploy 'date > /root/from-tmux.txt' Enter

最後の Enter は、改行キーを押す、という指定です。これが無いと文字が入力欄に置かれるだけで実行されません。忘れやすいところです。

中の様子を覗くこともできます。

tmux capture-pane -t deploy -p

-p は、拾った内容をそのまま画面に出す指定です。自動化した処理が中で何を言っているかを確かめるのに使えます。

終わらせる

tmux kill-session -t deploy

用が済んだセッションは畳みます。放っておくと、何をしていたか分からないセッションが溜まっていきます。tmux ls を時々見る癖を付けてください。

覚えるのは3つでいい

tmux には画面分割など多くの機能がありますが、運用で本当に効くのは次の3つです。

  1. tmux new -s <名前> — 作る
  2. Ctrl-b d — 離れる
  3. tmux attach -t <名前> — 戻る

これだけで、長い処理を安全に走らせられます。

手を動かす

名前を付けたセッションを画面を開かずに作り、そこへコマンドを送って実行させます。中の様子も覗きます。

ヒント

  • 1. tmux new -d -s deploy でセッションを作る
  • 2. tmux ls > /root/tmux-ls.txt で一覧を保存する
  • 3. tmux send-keys -t deploy 'date > /root/from-tmux.txt' Enter でコマンドを送る
  • 4. tmux capture-pane -t deploy -p > /root/tmux-pane.txt で中の様子を保存する
  • 5. tmux ls でセッションが残っていることを確かめる

6 項目で採点します