SSHが切れるたびに作業が飛ぶ問題
VPSで数時間かかる処理——ビルド、バックアップ、大規模なデータ移行——を実行中に、ネットワークが一瞬途切れてSSHセッションごと消えた。エンジニアなら一度は食らう、あの絶望感だ。
3年間で10台以上のVPSを管理してきたが、本番環境でこれをやらかしたときの後処理は特に最悪だった。バックアップが途中で止まり、中途半端な状態のファイルが散らばり、復旧に丸半日を費やした。
原因はシンプルだ。SSHセッションとその子プロセスは紐付いている。セッションが終わると子プロセス全体にSIGHUPシグナルが飛び、まとめて終了する。nohupや&でバックグラウンド実行する回避策はある。ただし、複数の作業を並行しながらリアルタイムで確認したい場面では、それだけでは足りない。
そこで使うのがtmux(Terminal Multiplexer)だ。
tmuxのコア概念を理解する
使いこなすには、3つの概念の階層構造を押さえておく。順番に整理しよう。
セッション・ウィンドウ・ペインの関係
- Session(セッション): tmuxサーバー上の独立した作業空間。SSH切断後も生き続ける
- Window(ウィンドウ): セッション内のタブ。用途別に複数作れる(例: monitoring、deploy、logs)
- Pane(ペイン): ウィンドウを分割した各領域。1画面に複数のターミナルを表示できる
構造的には「セッション → ウィンドウ → ペイン」という入れ子だ。日常的な作業はウィンドウとペインで完結し、セッションはプロジェクトや環境の単位で分けるのが一般的な使い方になる。
プレフィックスキーの仕組み
tmuxの全操作はプレフィックスキー(デフォルト: Ctrl+b)に続けてコマンドキーを押す形だ。たとえばウィンドウ一覧ならCtrl+bを押してからw。最初は少し戸惑うが、1日もあれば指が勝手に動くようになる。
実践: tmuxをインストールして使い始める
インストール
主要なLinuxディストリビューションはいずれも標準リポジトリに収録済みだ。
# Ubuntu / Debian
sudo apt update && sudo apt install -y tmux
# CentOS / RHEL / Rocky Linux
sudo dnf install -y tmux
# バージョン確認
tmux -V
# 出力例: tmux 3.3a
セッションの作成とデタッチ
起動直後から名前付きセッションを作る習慣をつけると、後の管理が格段に楽になる。
# 名前付きセッションを作成して入る
tmux new-session -s main
# セッションから「デタッチ」(離脱)する — プロセスは動き続ける
# Ctrl+b → d
# セッション一覧を確認
tmux ls
# 出力例:
# main: 1 windows (created Tue Feb 25 10:00:00 2026) [220x50]
# セッションに再接続(アタッチ)
tmux attach -t main
# または短縮形
tmux a -t main
デタッチ/アタッチがtmuxの核心だ。SSHが切れてもセッションはサーバー上に残る。再接続してアタッチするだけで、作業をそのまま再開できる。
ウィンドウ操作: 用途別にタブを分ける
# 新しいウィンドウを作成
Ctrl+b → c
# ウィンドウに名前をつける
Ctrl+b → , (コンマ)→ 名前を入力 → Enter
# ウィンドウ間の移動
Ctrl+b → 0 # 0番ウィンドウへ
Ctrl+b → 1 # 1番ウィンドウへ
Ctrl+b → n # 次のウィンドウ
Ctrl+b → p # 前のウィンドウ
Ctrl+b → w # ウィンドウ一覧(インタラクティブ選択)
# ウィンドウを閉じる
Ctrl+b → & (確認あり)
# または単純に
exit
ペイン操作: 1画面を分割して同時確認
「左でコマンドを実行し、右でログをtail」——この2ペイン構成が個人的には一番使い勝手がいい。
# 縦に分割(左右2ペイン)
Ctrl+b → % (パーセント)
# 横に分割(上下2ペイン)
Ctrl+b → " (ダブルクォート)
# ペイン間の移動
Ctrl+b → 矢印キー
# ペインのサイズ調整
Ctrl+b → Alt+矢印キー # 1セル単位で調整
Ctrl+b → :resize-pane -R 10 # 右に10セル拡張
# ペインを閉じる
Ctrl+b → x (確認あり)
# ペインをウィンドウに昇格させる
Ctrl+b → ! (エクスクラメーション)
実用的な構成例: Webサーバー監視セットアップ
本番環境向けの監視構成を、スクリプト1本で自動構築できる。
#!/bin/bash
# setup-monitor.sh — 監視用tmuxセッションを自動構築
SESSION="monitor"
# セッションが既に存在する場合はアタッチ
tmux has-session -t $SESSION 2>/dev/null
if [ $? -eq 0 ]; then
tmux attach -t $SESSION
exit 0
fi
# セッション作成(最初のウィンドウ: system)
tmux new-session -d -s $SESSION -n "system"
# 上下分割: 上でhtop、下でdisk監視
tmux send-keys -t $SESSION:system "htop" Enter
tmux split-window -v -t $SESSION:system
tmux send-keys -t $SESSION:system "watch -n 5 df -h" Enter
# 2番目のウィンドウ: logs
tmux new-window -t $SESSION -n "logs"
tmux send-keys -t $SESSION:logs "sudo tail -f /var/log/nginx/access.log" Enter
tmux split-window -h -t $SESSION:logs
tmux send-keys -t $SESSION:logs "sudo tail -f /var/log/nginx/error.log" Enter
# 3番目のウィンドウ: shell(作業用)
tmux new-window -t $SESSION -n "shell"
# systemウィンドウにフォーカスしてアタッチ
tmux select-window -t $SESSION:system
tmux attach -t $SESSION
実行すると、htop・ディスク監視・Nginxログ(アクセス/エラー)・作業用シェルの4つが一瞬で立ち上がる。ただし本番に投入する前に必ずステージングで確認を。tmuxのバージョン差異——特に3.0未満ではsend-keysの挙動が微妙に異なる——で意図しない動作をするケースが実際にある。
コピーモード: スクロールとテキストコピー
# コピーモードに入る(スクロール可能になる)
Ctrl+b → [ (左角括弧)
# コピーモード内の操作
# q または Escape → コピーモード終了
# 矢印キー / Page Up/Down → スクロール
# / → 下方向検索
# ? → 上方向検索
# Space → コピー開始位置を選択
# Enter → コピー確定
# コピーしたテキストをペースト
Ctrl+b → ] (右角括弧)
設定ファイルで使い勝手を上げる
~/.tmux.confを育てると、tmuxは別物のように快適になる。まずはこの5行から試してほしい。
cat ~/.tmux.conf
# プレフィックスをCtrl+aに変更(Screenユーザー向け、好みで)
# unbind C-b
# set -g prefix C-a
# bind C-a send-prefix
# マウス操作を有効化(クリックでペイン切替、スクロール可能)
set -g mouse on
# ウィンドウ番号を1始まりに(0より直感的)
set -g base-index 1
set -w -g pane-base-index 1
# ステータスバーのカスタマイズ
set -g status-style bg=colour234,fg=colour255
set -g status-right "#[fg=colour82]%Y-%m-%d %H:%M"
# 設定リロード
bind r source-file ~/.tmux.conf \; display "Config reloaded!"
設定を即反映するにはCtrl+b → r(上記バインド設定後)。セッション外からならtmux source ~/.tmux.confでOKだ。
よく使うコマンドリファレンス
| 操作 | キー/コマンド |
|---|---|
| 新規セッション作成 | tmux new -s 名前 |
| セッションにアタッチ | tmux a -t 名前 |
| セッション一覧 | tmux ls |
| セッション削除 | tmux kill-session -t 名前 |
| デタッチ | Ctrl+b → d |
| 新ウィンドウ | Ctrl+b → c |
| 左右分割 | Ctrl+b → % |
| 上下分割 | Ctrl+b → " |
| コピーモード | Ctrl+b → [ |
tmuxを使い始めてから変わったこと
導入して以来、SSH切断によるプロセス消失は一度もない。それだけではなく、デプロイ作業でログウィンドウとシェルウィンドウを横並びにしながら進められるようになり、作業のテンポが明らかに変わった。
キーバインドは最初、覚えるのが面倒に感じるかもしれない。ただCtrl+b → ?でいつでもヘルプが出るので焦る必要はない。まず「セッション作成 → デタッチ → アタッチ」の3操作だけ身につければ十分だ。残りは実際に手を動かすうちに自然と覚えていく。
