私は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
最も簡単な方法は、screen
1つのコマンドがもう一方のコマンドに依存しないように、そのエラーをコマンドから切り離すことです。
screen -S server
ruby start.rb true 3001
...
exit
Ctrl Adこれにより、画面が切り離され、後で使用してこの名前付きセッションを再接続できることが既にわかりますscreen -r server
。
このコマンドで生成される可能性のあるエラーについては、引き続きruby
確認できます。コマンドが終了してもセッションは引き続き実行されるため、完了したらscreen
常にexit
再接続することを忘れないでください。