🚉
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