リモートコマンドの実行を維持し、出力を保存します。

リモートコマンドの実行を維持し、出力を保存します。

想像してください。

コンピュータにSSHを接続し、新しい画面セッションを開き、スクリプトを起動しました。

数日後、SSHを介してマシンに再接続し、スクリーンセッションに再接続して生成された出力を確認しました。出力を後ろにスクロールできませんでした。

私が知る限り、screenはstdout出力の「画面サイズ」を保存します。私のスクリプトが48時間以内に100行の出力を生成すると、すべての内容が表示されず、最後の40行しか表示されません。screen引き続き実行中のスクリプトがすべてのstdoutを保存してローカルコンピュータで実行されるスクリプトであるかのように、画面とPgUp / PgDnを再接続する方法はありますか?

たぶんscreenこれが最善の方法ではないかもしれません。ログアウトした後、リモートシステムでスクリプトを実行し、後でプロセスに再接続してすべての出力を表示するためのより良い方法はありますか?

答え1

出力をファイルに簡単に保存できます

my_command > mylogfile

コマンドが実行されたときに何が起こるかを確認するには、tail2番目の画面で次のものを使用できます。

tail -f mylogfile

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

編集する使用したくない場合は、screenいつでも使用してnohupセッションを閉じてください。

nohup my_command > mylogfile &

答え2

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

screen -L -S <screen_name>

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

screenlog.0を表示するには、cat(viではない)を使用してください。参考資料

cat screenlog.0

答え3

Screen は、過去の出力行のログを保持します。画面文書ではこれを「スクロールバック履歴バッファ」と呼びます。

ナビゲーションを後ろにスクロールするにはC-a ESCcopy)。矢印とPgUp/PgDnキーを使用してナビゲートできます。その他のキーテキストを検索してコピーします。ESCロールバック/コピーモードを終了するには、このキーを押します。

デフォルトでは、Screenは100行の値のみを保持します。一つ入れるdefscrollbackあなたの指示に従って.screenrcこの番号が変わります。

スクリプトの完全なログが必要な場合は、ファイルに保存してください。親シェルに再接続し、スクリプトがまだ実行されているか、中断して再起動するかを簡単に確認できるように、画面内で実行してください。またはフォークにしてくださいそしてnohup。ログファイルの増加を監視するにはtail -f

答え4

画面で出力を表示および記録するには、teeログ名にパラメータとしてパイプします。

関連情報