TT Lab
はじめる
学ぶ 学習パス コース

vimとtmux

tmuxのセッションとウィンドウ

TT Labで続きを見る

目標

tmuxのセッションとウィンドウを作り、デタッチ状態を確認し、設定ファイルが実際にサーバーに反映されるかを検証したあと、開発環境を再現するスクリプトを作ります。

なぜ重要なのか

tmuxでコマンドを実際に実行しているのは、自分のターミナルではなくtmuxサーバープロセスです。自分のターミナルは、その画面を受け取って見るクライアントにすぎません。SSHが切れるとクライアントは消えますが、サーバーとその子たちは何の影響も受けません。そのため、再接続してアタッチすれば、画面までそのまま戻ってきます。nohupとの決定的な違いがこれです。nohupは作業を生かしますが、画面と入力は返してくれません。そして最後のステップがスクリプトである理由は、手で作った配置はサーバーが再起動すると消えますが、スクリプトは残るからです。

ステップ

  1. workという名前のセッションを作成してください。
  2. workセッションにウィンドウを追加して合計3つ以上にし、そのうち1つの名前をlogsにしてください。
  3. workセッションのウィンドウ0の名前をeditに変更してください。
  4. workセッションからデタッチしてください。セッションは生きている必要があり、アタッチしているクライアントはいない必要があります。
  5. deployセッションをアタッチせずに作成し、その中にbuildという名前のウィンドウがあるようにしてください。
  6. /root/.tmux.confを作成して、次の4つを設定してください: プレフィックスキーをC-aに、マウスの使用をon、ウィンドウのインデックスの開始を1に、ペインのインデックスの開始を1に。
  7. 任意のファイルを作成して、workセッションのlogsウィンドウでtail -fで追跡させてください。採点時点で、実行され続けている必要があります。
  8. /root/tmux/session.sh <세션이름>を作成してください(プレースホルダーはセッション名です)。引数として受け取った名前のセッションをアタッチせずに作成し、その中にapiとdbの2つのウィンドウがある必要があります。同じ名前で2回実行しても成功する必要があり、ウィンドウが増えてはいけません。

参考

最初のセッションを作る

workという名前のセッションを作成してください。

tmux new -sで名前を指定して作成します。セッションを作ると、サーバーも一緒に起動します。

ウィンドウを追加して名前を付ける

workセッションにウィンドウを追加して合計3つ以上にし、そのうち1つの名前をlogsにしてください。

prefix + cで新しいウィンドウ、prefix + ,で名前の変更です。CLIでは、new-window -nで名前を指定します。

ウィンドウ0の名前を変更する

workセッションのウィンドウ0の名前をeditに変更してください。

rename-windowコマンドに-tで対象を指定できます。対象の表記は、セッション:ウィンドウの形式です。

セッションを切り離しておく

workセッションからデタッチしてください。セッションは生きている必要があり、アタッチしているクライアントはいない必要があります。

prefix + dで切り離します。セッションは消えず、サーバーの中に残っている必要があります。

アタッチせずにセッションを作る

deployセッションをアタッチせずに作成し、その中にbuildという名前のウィンドウがあるようにしてください。

-dオプションを付けると、作成するだけでアタッチしません。最初のウィンドウの名前は、-nで指定します。

設定ファイルを作る

/root/.tmux.confを作成して、次の4つを設定してください: プレフィックスキーをC-aに、マウスの使用をon、ウィンドウのインデックスの開始を1に、ペインのインデックスの開始を1に。

プレフィックスキーの変更には、unbindとset -gが一緒に必要です。pane-base-indexはウィンドウオプションなので、setwで指定します。

長時間動くプロセスをセッションに置く

任意のファイルを作成して、workセッションのlogsウィンドウでtail -fで追跡させてください。採点時点で、実行され続けている必要があります。

ファイルを1つ作って、tail -fで追跡させてください。logsウィンドウで、動き続けている必要があります。

セッションのブートストラップスクリプト

/root/tmux/session.sh <세션이름>を作成してください(プレースホルダーはセッション名です)。引数として受け取った名前のセッションをアタッチせずに作成し、その中にapiとdbの2つのウィンドウがある必要があります。同じ名前で2回実行しても成功する必要があり、ウィンドウが増えてはいけません。

セッション名を$1で受け取り、すでにあればそのままにして、成功する必要があります。has-sessionで確認できます。