コマンドがエラーで終了した場合は、画面内で実行されたコマンドの出力を表示します。

コマンドがエラーで終了した場合は、画面内で実行されたコマンドの出力を表示します。

私はscreenこのコマンドを使用してフォアグラウンドで実行されているサーバーを起動しています。ところで、サーバの起動時にエラーが発生した場合、コマンドの出力は表示されません。私はしてはいけませんscreen

foo@ubuntu:~/server/application$ screen -S server ruby start.rb true 3001
[screen is terminating]
foo@ubuntu:~/server/application$

screenフィルタリングされたコマンドが失敗しても、画面でSTDERR / STDOUT出力を表示したいと思います。これを行う方法はありますか?

答え1

サーバーが正常に起動し、エラーメッセージで終了しなかったことをどうやって知ることができますか?

明示的に終了するまでスクリーンセッションを表示したい場合は簡単です。rubyシェル実行などのコマンドを実行した後も終了しないコマンド:

screen -S server sh -c 'ruby start.rb true 3001; echo "Server terminated with status $?"; exec bash'

またはタイムアウト後に終了

screen -S server sh -c 'ruby start.rb true 3001; echo "Server terminated with status $?"; sleep 3600'

サーバーが稼働していてもタイムアウト後に切断したい場合:

screen -S server sh -c '
  ruby start.rb true 3001 &
  server_pid=$!
  sleep 2
  if [ -z "$(ps -o pid= -p "$server_pid")" ]; then
    wait
    echo "Server terminated with status $?"
    exec bash
  fi
'

答え2

はい。起動および停止時に画面表示をリセットし、screenその過程で画面を消去します。コマンドによって生成されたエラーを確認するruby最も簡単な方法は、screen1つのコマンドがもう一方のコマンドに依存しないように、そのエラーをコマンドから切り離すことです。

screen -S server
ruby start.rb true 3001
...
exit

Ctrl Adこれにより、画面が切り離され、後で使用してこの名前付きセッションを再接続できることが既にわかりますscreen -r server

このコマンドで生成される可能性のあるエラーについては、引き続きruby確認できます。コマンドが終了してもセッションは引き続き実行されるため、完了したらscreen常にexit再接続することを忘れないでください。

関連情報