web-dev-qa-db-ja.com

再起動後にtmuxセッションを復元する

Tmuxセッションを保存する方法はありますか?つまり、コンピュータを再起動した場合、常にセッションが失われることになりますか?

247
KendallB

はい、コンピュータを再起動するとセッションが失われます。セッションを保存できません。しかし、それらはスクリプト化することができます。実際にほとんどの作業は、セッションを再作成できるようにいくつかのセッションをスクリプトすることです。たとえば、セッションを作成するための簡単なシェルスクリプトは次のとおりです。

#!/bin/zsh                                                                                                   

SESSIONNAME="script"
tmux has-session -t $SESSIONNAME &> /dev/null

if [ $? != 0 ] 
 then
    tmux new-session -s $SESSIONNAME -n script -d
    tmux send-keys -t $SESSIONNAME "~/bin/script" C-m 
fi

tmux attach -t $SESSIONNAME

これが何をするかです。まず、tmux has-sessionを使用して、その名前のセッション(この場合、元の名前は "script")が既に存在するかどうかを確認します。戻りコードを確認します。その名前のセッションが進行中の場合は、「if」サイクルをスキップして最後の行に直接進み、そこでセッションに接続します。それ以外の場合は、セッションを作成していくつかのキーを送信します(今のところランダムスクリプトを実行するだけです)。それから "if"ブロックを抜けてアタッチします。

これはとても簡単なサンプルです。添付する前に、複数のウィンドウ、ペインなどを作成できます。

ただし、これはあなたが要求したものとまったく同じではありません。たとえばセッションに変更を加えた場合は、ウィンドウの名前を変更してその中に新しいペインを作成します。再起動した場合、その変更はもちろん保存されません。

手動でスクリプトを作成する方が好きですが、スクリプトセッションのプロセスを簡単にするツールがいくつかあります(より汎用的であると思います)。それらのツールは TmuxinatorTeamocil です。

私の主な情報源は "The Pragmatic Bookshelf" Tmux bookでした。

164
Dakatine

私は単純なbashスクリプト を書きました。これは開いているtmuxセッション、ウィンドウ、現在の作業ディレクトリをそれぞれ永続化します。

手動でまたは定期的にcronから呼び出します(忘れてしまうかもしれません)。

tmux-session save

~/.tmux-sessionに書き込みます。再起動後に復元します。

tmux-session restore

私はこれを数百行のPerlスクリプトよりはるかに良いと思います。

114
mislav

私はあなたが完全なtmux環境を保存して後でそれを復元することを可能にするtmuxプラグインを書きました。 tmuxを絶対に終了しないようにするために、本当に詳細になるようにします。

https://github.com/tmux-plugins/tmux-resurrect

更新日:tmux環境の自動バックグラウンド保存を実行する tmux-continuum プラグインが追加されました。オプションで、コンピュータの再起動後に自動的にtmux envを*自動的*に復元します。

83
user124460

tmuxinator はRubyで書かれたツールで、tmuxセッションを簡単に作成し管理するために使用できます。それは後でtmuxセッションとしてインスタンス化することができるプロジェクトを作成するために使用することができます。

10
Praveen Kumar

ここで見つけた この部分解を考えてみてください

作成者は、サーバの再起動後にtmuxセッションの状態を保持するために、tmuxセッションの履歴を保存する関数を作成します。

5
greg

セッションの再作成に https://github.com/jimeh/tmuxifier を使用しました。これはRubyなしでインストールすることができます。ただgitを使うだけです。

サンプルはかなり自明です、例: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh

0
stej