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


255

tmuxセッションを保存する方法はありますか?つまり、コンピューターを再起動すると、セッションは常に失われますか?


1
代わりにディスクに休止状態にすることができます
マットフレーマン

36
休止状態は、コンピューターを常に再起動せずに実行したままにする代わりの方法です。
-chepner

5
@chepner:それらの日がありますとき*** System restart required ***
karatedog

2
@karatedogはい、だからこそ、休止状態はリブート時にtmuxセッションを失うことの解決策ではないということに同意します。
chepner

回答:


170

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

#!/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を使用して、その名前(この場合、非常に元の名前は「スクリプト」)を持つセッションがあるかどうかを確認します。戻りコードをチェックします。その名前のセッションが既に進行中の場合、「if」サイクルをスキップして、最後の行に直接進み、セッションにアタッチします。それ以外の場合は、セッションを作成し、いくつかのキーを送信します(とりあえずランダムスクリプトを実行します)。次に、「if」ブロックを終了してアタッチします。

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

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

スクリプトセッションのプロセスを容易にするツールがいくつかありますが、私は手動で行うことを好みます(より汎用性が高いと思います)。これらのツールはTmuxinatorTeamocilです。

私の主な情報源は「The Pragmatic Bookshelf」Tmux本でした。


1
5つのファイルを開いた状態でセッションを復元したい場合、何もしないようです。それをする方法はありませんか?
チョビー

4
Tmuxは、実行していたプロセスの状態について何も知りません。あなたは、スクリプト持つ可能性があり、同じ「送信-キー」や「スプリット・ウィンドウのコマンドは次のように「vimのFILE1 FILE2 FILE3」やエディタのセッション管理に見える(vimの-Sなど)を有することにより、開いているファイルを
bloyを

tmux send-keys ...ラインの目的は何ですか?
ドミニカスモスタウスキス14

2
コマンド@DominykasMostauskis 送信し、指定されたセッションにキーの押下を。それはセッションに入り、キーボードからそれらのまさにキーを入力するようなものです。この場合、「〜/ bin / script」に続いてEnterを送信します。
ダカティン14

1
この組み合わせsome command; if [ $? != 0 ]; then .....は、次のように記述(および読み取り)するのがより簡単ですif ! some command; then .....
fonini

117

開いているtmuxセッション、ウィンドウ、およびそれぞれの現在の作業ディレクトリを保持する単純なbashスクリプト作成しました。

手動または定期的にcronから呼び出します(忘れる可能性があるため):

tmux-session save

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

tmux-session restore

これは、数百行のPerlスクリプトよりもはるかに優れていると思います。


これは、1つのtmuxセッションがある場合のみですか?
セブンアース

86

完全なtmux環境を保存して後で復元できるtmuxプラグインを作成しました。あなたがtmuxを決してやめないという感覚を持つように、それは本当に詳細になるよう努めています。

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

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


私が検索したのと同じリンクで「答え」を投稿したように、「do'h!」あなたのプラグインが何と呼ばれていたかを思い出そうとして、これを見つけました。
phatskat 14

このプラグインは悪くありませんが、すべてのプログラムを復元しませんでした。より多くのドキュメントを読み、githubで問題を送信する可能性があります。
アルネ

@Arneプログラムによっては、プログラムのチェックポイント設定が必要になる場合があります。代わりに、復元するようにプログラムを構成することをお勧めします-永続的な.vimrcファイルやvimのカーソル位置など-そして、再起動可能な人のようなプログラムのtmux pane_current_commandを保存します。私の意見では、チェックポイント設定は非常に複雑ですが、いずれにしても検討する価値があります。
ジョンP

@ bruno-suticプラグイン(tmux-resurrect)とtmux-coninuumの違いは何ですか?
ロニー


10

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


5

見つかっこの部分的な解決策を検討し、ここを

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


17
彼らの言うことを投稿してもらえますか?リンクが腐敗する可能性があります。
13

1
@cpast:これは事実ですが、コメントも腐敗する可能性があります。両方を提供するのがベスト:)
ダニエルポップス

6
あなたのリンクを@グレッグは、404を返します
rofrol

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.