tmuxのセッションとウィンドウ
目標
tmuxのセッションとウィンドウを作り、デタッチ状態を確認し、設定ファイルが実際にサーバーに反映されるかを検証したあと、開発環境を再現するスクリプトを作ります。
なぜ重要なのか
tmuxでコマンドを実際に実行しているのは、自分のターミナルではなくtmuxサーバープロセスです。自分のターミナルは、その画面を受け取って見るクライアントにすぎません。SSHが切れるとクライアントは消えますが、サーバーとその子たちは何の影響も受けません。そのため、再接続してアタッチすれば、画面までそのまま戻ってきます。nohupとの決定的な違いがこれです。nohupは作業を生かしますが、画面と入力は返してくれません。そして最後のステップがスクリプトである理由は、手で作った配置はサーバーが再起動すると消えますが、スクリプトは残るからです。
ステップ
workという名前のセッションを作成してください。workセッションにウィンドウを追加して合計3つ以上にし、そのうち1つの名前をlogsにしてください。workセッションのウィンドウ0の名前をeditに変更してください。workセッションからデタッチしてください。セッションは生きている必要があり、アタッチしているクライアントはいない必要があります。deployセッションをアタッチせずに作成し、その中にbuildという名前のウィンドウがあるようにしてください。/root/.tmux.confを作成して、次の4つを設定してください: プレフィックスキーをC-aに、マウスの使用をon、ウィンドウのインデックスの開始を1に、ペインのインデックスの開始を1に。- 任意のファイルを作成して、
workセッションのlogsウィンドウでtail -fで追跡させてください。採点時点で、実行され続けている必要があります。 /root/tmux/session.sh <세션이름>を作成してください(プレースホルダーはセッション名です)。引数として受け取った名前のセッションをアタッチせずに作成し、その中にapiとdbの2つのウィンドウがある必要があります。同じ名前で2回実行しても成功する必要があり、ウィンドウが増えてはいけません。
参考
tmux new-session -d -s 이름 -n 첫윈도우이름(プレースホルダーは、順にセッション名と最初のウィンドウ名です)で、アタッチせずに作成できます。tmux has-session -t 이름 2>/dev/null(プレースホルダーはセッション名です)は、セッションがあれば0を返します。冪等性の鍵です。- 対象の表記は
세션:윈도우.페인(韓国語の語は、順に「セッション」「ウィンドウ」「ペイン」を意味します)です。work:logsのように書きます。 - 採点ツールは、ステップ6を検査するとき、別のソケットに一時サーバーを起動して、その設定ファイルを実際に読み込ませてみます。ファイルに書いてあっても、文法エラーがあれば失敗します。
- よくあるミス1: ステップ8でセッション名をハードコードすると、引数を受け取る意味がなくなります。
- よくあるミス2: ステップ8で
-dを外すと、スクリプトがアタッチしようとして、自動化の中で止まります。
最初のセッションを作る
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で確認できます。