🚉

tmuxで作る“無人運転”ターミナル

に公開

はじめに

長時間走らせたい学習・スクレイピング・解析バッチを、端末を閉じても止めない――それを最小学習コストで実現するのが tmux です。ここでは以下のサンプルを使って、tmuxの超実用最小セット(起動→切断→再接続)を解説します。

# count.py
import time, datetime, sys

for i in range(600):
    ts = datetime.datetime.now().strftime("%H:%M:%S")
    print(f"[{i+1:4}] {ts} まだ動いてます…", flush=True)
    time.sleep(1)
print("完了しました")

前提と準備

  • Linux / macOS
  • Pythonが動作すること
  • tmux が未インストールなら導入
# Debian/Ubuntu
sudo apt-get update && sudo apt-get install -y tmux

# macOS(Homebrew)
brew install tmux

セッションを作って“切り離す”

# 1. セッション作成(名前=job1)して入る
tmux new -s job1

# 2. ここで Python を実行
python count.py
# 画面に1秒ごとに "[   1] 12:34:56 まだ動いてます…" と出続ける

# 3. セッションから “離れる” (プロセスは継続)
#   Ctrl-b を押してから d を押す   ← これだけでデタッチ

状態確認と再入室:

tmux ls            # 実行中のセッション一覧を表示
tmux attach -t job1  # job1に再接続

止めたいとき:

# セッション内で Ctrl-c でジョブ停止 → exit
# あるいは外から
tmux kill-session -t job1

ポイント:デタッチしてもプロセスは継続。SSHが切れてもOK。

ありがちなハマりどころと回避

  • SSH切断で止まるtmux 内で実行していない可能性。必ず tmux の中で起動
  • 出力が途切れる:Python側のバッファで詰まることがあります。今回は print(..., flush=True) 済み。

まとめ

  • tmuxセッションを生かしたまま自由に出入りできる“無人運転ハブ”
  • ワンライナーで再現性のあるジョブ起動が可能

今日から長時間ジョブは tmux セッションで回しましょう。止まらない安心感が、実験の回転数と集中力を上げてくれます。

Discussion