alfort's Blog

Linuxエンジニアのメモ

byobuコマンドで再起動してもセッションを保持する

byobuで再起動時にセッションを保存、復元する

ターミナルマルチプレクサの一つであるbyobuコマンドで、マシンを再起動したり、シャットダウンしてしまってもすぐに元の状態に戻したいという話。

ターミナルマルチプレクサの欠点

ターミナルマルチプレクサ系の欠点というと、セッションが保存できないことである。

自分はLinuxのサーバでbyobuコマンドを使っているので、手元のノートPCからsshした先で端末を開いている。

なので、ノートPCをシャットダウンしたり、再起動してもすぐに直前の作業の続きから始めることができる。

Linuxサーバは常時電源を入れっぱなしの状態でほとんど再起動することがない。

が、たまにパッケージの更新だったり、バージョンアップとかでマシンの電源を落とすことがある。

こういうとき、「直前の作業画面の復元」から始まることになって、時間を使ってしまう。

パッケージの更新とかはバグ修正とか新機能の追加なんかが入ることもあってできる限り頻繁にやっておきたいけれど、「直前の作業画面の復元」は面倒なのでやりたくない。

「直前の作業画面の復元」をしなくて済むように、再起動時にセッションを保存、復元できるようにする。

byobuとは

byobuとは、ターミナルマルチプレクサとして使われるコマンドの一つ。

http://byobu.co/index.html

ターミナルマルチプレクサとして有名なtmuxscreenのラッパーコマンドでしかないのだけれども、設定ファイルとかを書かなくてもよく、インタラクティブに設定することができるので扱いやすい。

今回はtmuxを内部的に呼び出している場合(byobuだと、tmuxscreenどちらを内部的に呼び出すのか選択できる)の設定方法を書いている。

tmuxにおけるtpm(tmux plugin manager)を使ったセッションの保存、復元

実はbyobu自体の機能を使っているのではなく、tmuxでできる機能を使ってセッションを保存している。

なので、まずはtmuxでセッションの保存と復元を行うための大まかな流れを調べてみた。

  • tpm(tmux plugin manager)をインストールする
  • .tmux.confに初期設定を書く
  • 設定を読み込ませる
  • .tmux.confプラグインの設定を書き込む
  • 設定を読み込ませる
  • プラグインのインストール

tpm(tmux plugin manager)というものを使うらしい。

細かい作業内容は以下に書いている。

github.com

byobuでも内部的にはtmuxを使っているので、うまくやれば同じことができそうではある。

byobuでの作業

tmuxの作業に沿って、同じことをbyobuでもやっていく。

tpm(tmux plugin manager)をインストールする

まずはtpmを落としてくる。

デフォルトならこれで良いらしい。

$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

自分はGitリポジトリをまとめておいておきたいので以下のようにした。

$ cd ~/repo            # Gitリポジトリをまとめておいているところ
$ git clone https://github.com/tmux-plugins/tpm
$ mkdir -p ~/.tmux/plugins
$ ln -s tpm ~/.tmux/plugins/tpm   # シンボリックリンクを張っている

.tmux.confに初期設定を書く

byobuの場合、.tmux.conf~/.byobu/.tmux.confにある。 なので、ここに設定を書き込む。

tpmリポジトリにあるように、とりあえず以下の内容を書き込めばOK。

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'git@github.com/user/plugin'
# set -g @plugin 'git@bitbucket.com/user/plugin'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run -b '~/.tmux/plugins/tpm/tpm'

設定を読み込ませる

あとは設定を読み込ませる。

しかし、byobuだとひと手間必要みたい。

本来、~/.tmux.confにあるはずの設定ファイルがないために、インストールがうまく行かない。

結論としては、シンボリックリンクを張ってしまえばいいみたい。

$ ln -s ~/.byobu/.tmux.conf ~/.tmux.conf

あとはtpm同様に、byobuを開いた状態で以下のコマンドを打ち込めばOK。

# type this in terminal if tmux is already running
$ byobu source ~/.byobu/.tmux.conf     # tmux でも byobu でも同じコマンドでいいっぽい

ひとまず、byobuを起動した状態で、Byobu Prefix+Iを押して、インストールを待つ。 インストールが上手く行っていると、以下の場所にtmux-sensible(設定ファイルに書いているプラグインの一つ)ディレクトリができているはず。

$ ls ~/.tmux/plugins/
tmux-sensible  tpm

.tmux.confプラグインの設定を書き込む

残りは、tmuxとほぼ同様の手順。 以下の記事とかを参考にした。

qiita.com

実際に使っているプラグインリポジトリは以下の通り。

github.com

github.com

.tmux.confを編集して、以下のように書き換える。

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'git@github.com/user/plugin'
# set -g @plugin 'git@bitbucket.com/user/plugin'

# Plugins
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-resurrect'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run -b '~/.tmux/plugins/tpm/tpm'

設定を読み込ませる

先ほどと同じように、以下のコマンドで設定ファイルを読み込ませる。

$ byobu source ~/.byobu/.tmux.conf     # tmux でも byobu でも同じコマンドでいいっぽい

プラグインのインストール

こちらも、書き換えた後にはbyobuを起動した状態で、Byobu Prefix+Iを押して、インストールを待つ。

セッション保存、復元の設定とその読み込み

これで、byobuは15分おきに勝手にセッションの状態を保存してくれるようになる。

また、手動で保存するときにはByobu Prefix+Ctrl-s、復元はByobu Prefix+Ctrl-rでうまくできる。

コマンドの状態とかも普通に復元できててすごい。

その他

起動時に自動でセッション復元とかもできるみたいだけれども、byobuではなくてtmuxが起動してしまっててうまくbyobuが起動できなかった。

なので、とりあえずで手動で復元するようにしている。