如果远程会话丢失并再次连接,如何在通过Putty连接到远程主机(OS Solaris)时捕获Java应用程序输出(System.out.println()
)?远程主机上的Java应用程序是这样启动的:
java-jar/SomeApplication.jar;
现在输出是可见的。但是,如果我退出远程会话并再次连接——尽管同一个java应用程序仍在运行,但看不到更多的输出——我可以通过发出以下命令来看到它:
ps-ef|grepjava
输出为:
根5221 1 0 20:04:15?1:20 java-jarSomeApplication.jar
应用程序ID是5221,它正在运行,但它的输出在某个地方消失了。。
一个快速而简洁的建议是在screen
会话中运行应用程序(查看Solaris软件包)。
首先,您启动屏幕:
$ screen
然后在screen
内启动应用程序,就像往常一样:
$ java -jar /SomeApplication.jar
你已经做好了准备。您不需要尾随的&
:您可以分离(见下文)并注销;屏幕会话将保持运行。下次登录时,只需发布:
$ screen -x
会话及其输出将被重新附加。
快速参考:
使用CTRL+a12>(先是<kbd]CTRL>+a在一起,然后是d会话分离,这样您就可以离开
screen
会话(内部运行java应用程序),返回Solaris shell并执行其他操作,包括优雅地注销。使用CTRL+a>退出复制模式。
还有许多其他有用的功能,只需快速阅读介绍:)
日志文件在这些场景中发挥得更好。系统输出也是昂贵的操作。或者在启动java程序时,将错误/输出重定向到临时文件。所以你可以稍后查看。
java -jar /SomeApplication.jar > wherever_you_want_output.log 2>&1 &
>将system.out.println重定向到文件2>&1将system.err.println发送到同一个文件(您也可以放置2> error_file.log
以获得单独的system.err.println()输出。
不过,从长远来看,您应该通过log4j或java日志框架来使用日志框架。
如果你想观察输出,然后随着它的增长,你可以做一个tail -f whatever_you_want_output.log