2023年10月23日月曜日

byobu

Linuxへsshでリモートでログインしている際に、
クライアント側のsshを実行しているターミナルが落ちると、
実行中のプロセスが強制終了されてしまいます。
それを防ぐ手段として大昔に
nohupやdisownを使う方法について書いたことがありましたが
最近もっといい方法があることを知りました。
byobuです。

このbyobu、超絶便利です。
細かい動作は調べていないのでわかりませんが、
byobuをリモートコンソール上で実行すると、
サービスとしてシェルを動作させて、それの標準入出力を
リモートコンソールにリダイレクトしているような感じです。
リモートコンソールを閉じてもジョブ/プロセスは実行されっぱなしで、
再ログイン後に再度byobuを実行すると、
ログアウトしている時間がなかったかの様に元の状況に戻せます。
接続が切れている間の標準出力などもそのまま残っています。
面白い特性としては、同一ユーザで別々の場所から
複数リモートログインし、それぞれでbyobuを実行すると、
まるでリモートデスクトップのように両方から同時に操作し、
結果がそれぞれに反映されます。ペアプログラミングに使えそうです。
別ユーザでログインすれば別のセッションとして扱われるので、
ターミナルを複数枚開いてそれぞれでbyobuを実行し、
別々の作業をするようなことにも使えます。
まだ深く使っていませんが、オプション等も豊富なようで、
1ユーザでの複数セッション利用も可能っぽいです。
いろいろ文章で書きましたが、使ってみればその便利さがわかります。

ということで使ってみます。
なおUbuntu 22.04をリモートで使うことを前提として描きます。
以下でインストールします。
server# apt install byobu
そして以下のようにリモートでログインしてbyobuを実行します。
client$ ssh <server> 
client$ byobu
あとは好きにコマンドを実行させるだけです。
たとえば無限にpingを投げるように
client$ ping localhost
を実行した上で、一旦ターミナルを強制的に閉じ、
新たにターミナルを開いて
client$ ssh <server> 
client$ byobu
を実行すれば、pingを投げ続けていたことと、
投げ続けていることが確認できます。

ただしちょっとした問題も。
Windowsの標準のコマンドプロンプト
(cygwinとかpowershellとか内部の話ではなく、
ウィンドウを司るアプリケーションの意)だと
画面下端のステータスバーの描画時に画面がスクロールし使い物になりません。
まあcmderを使うと上手く表示できました。

0 件のコメント:

コメントを投稿