我正在使用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
在完成后重新连接。