如果命令退出时出现错误,则显示在屏幕内运行的命令的输出

如果命令退出时出现错误,则显示在屏幕内运行的命令的输出

我正在使用screen命令启动在前台运行的服务器。但如果启动服务器时出现错误,我将无法看到命令的输出。我必须在没有screen.

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

我希望在屏幕上看到 STDERR/STDOUT 输出,即使在使用时,screen即使筛选的命令失败。有什么办法可以做到这一点吗?

答案1

您如何知道服务器已成功启动,并且不会因错误消息而终止?

如果您想显示屏幕会话直到明确终止,这很容易。运行命令后不终止的命令ruby,例如运行 shell:

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命令分开,以便一个命令不再依赖于另一个命令:

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

您可能已经知道这Ctrl Ad将分离屏幕,稍后您可以使用 重新附加此命名会话screen -r server

该命令可能生成的错误ruby仍可供仔细阅读。即使命令退出,screen会话仍将保持运行,因此请务必记住exit在完成后重新连接。

相关内容