リモートコマンドを実行したまま出力を保存する

リモートコマンドを実行したまま出力を保存する

シナリオ;

マシンに SSH 接続し、新しい screen セッションを開いて、スクリプトを実行しました。

数日後、SSH でそのマシンに戻り、screen セッションを再接続して生成された出力を確認しましたが、出力をスクロールして戻すことができません。

私が見る限り、screen は 1 つの「画面分」の stdout 出力を保存します。スクリプトが 48 時間で 100 行の出力を生成した場合、すべてを見ることはできず、最後の 40 行程度しか見ることができません。screen実行したままにしているスクリプトからすべての stdout を保存して、ローカル マシンで実行されているスクリプトであるかのように、screen を再接続して PgUp/PgDn できるようにする方法はありますか?

おそらく、screenこれは最も最適な方法ではないでしょうか? ログアウト後にリモート マシンでスクリプトを実行したままにしておき、後日そのプロセスに再度接続してすべての出力を表示できるようにする、よりよい方法はありますか?

答え1

出力をファイルに保存するだけで

my_command > mylogfile

コマンドの実行中に何が起こっているかを確認したい場合は、tail2 番目の画面で使用できます。

tail -f mylogfile

出力全体を見るだけでなく、それを処理(比較、検索など)することもできます。

編集使用したくない場合はいつでも使用してセッションを閉じるscreenことができますnohup

nohup my_command > mylogfile &

答え2

次のように、screen を起動するときにパラメータ -L を使用して出力ログをオンにすることもできます。

screen -L -S <screen_name>

これにより、上記のコマンドから画面を起動したディレクトリに screenlog.0 というログ ファイルが作成されます。

screenlog.0 を表示するには、cat を使用します (vi ではありません)SO参照

cat screenlog.0

答え3

Screen は過去の出力行のログを保持します。これは Screen ドキュメントでは「スクロールバック履歴バッファ」と呼ばれています。

スクロールバックを移動するには、C-a ESCcopyPgUp矢印キーと/キーを使ってPgDn移動したり、その他のキーテキストを検索してコピーします。ESCスクロールバック/コピー モードを終了するには、を押します。

デフォルトでは、Screenは100行分しか保存しません。defscrollback.screenrcこの数字を変更するには、指示に従ってください。

スクリプトの完全なログが必要な場合は、ファイルに保存します。Screen内で実行すると、親シェルに接続してスクリプトがまだ実行中かどうかを簡単に確認したり、一時停止して再起動したりできます。または、スクリプトを分岐します。nohupログ ファイルのサイズが大きくなるのを監視するには、 を使用しますtail -f

答え4

出力を画面に表示し、ログにも記録したい場合は、teeログの名前をパラメータとしてパイプするだけです。

関連情報