How to catch Java application output (System.out.println()) when connected to remote host (OS Solaris) via Putty and connection is lost?

StackOverflow https://stackoverflow.com/questions/20978823

  •  25-09-2022
  •  | 
  •  

Frage

How to catch Java application output (System.out.println()) when connected to remote host (OS Solaris) via Putty if remote session is lost and connected again? Java application on remote host was started like this:

java -jar /SomeApplication.jar &

Now the output is visible. But if I exit remote session and connect again - no more output is visible, though the same java application is still running - I can see it by issuing this command:

ps -ef | grep java

Output is:

root 5221 1 0 20:04:15 ? 1:20 java -jar SomeApplication.jar

The application ID is 5221 and it is running, but it's output vanishes somewhere..

War es hilfreich?

Lösung

A quick and neat suggestion is running the application in a screen session (check the Solaris package).

First, you launch screen:

$ screen

Then you launch the application inside screen, like usual:

$ java -jar /SomeApplication.jar

And you are set. You don't need the trailing &: you can detach (see below) and log out; the screen session will be kept running. On next login, just issue:

$ screen -x

and the session, with its output, will be reattached.

A quick reference:

  • Use CTRL+a d (first CTRL+a together, then d) to detach from the session, so that you leave the screen session (with the java application running inside), go back to the Solaris shell and do other things -- including logging out graciously.

  • Use CTRL+a ] to enter "copy mode", so that you can scroll up and down and q to leave copy mode.

There are many other useful features, just read a quick intro :)

Andere Tipps

Log files play better in these scenarios.And sysouts are expensive operations too. Or when you start the java program, redirect error/outputs to a temp file. So you can view it later.

java -jar /SomeApplication.jar > wherever_you_want_output.log 2>&1 &

the > redirects system.out.println to the file, the 2>&1 sends the system.err.println to the same file (you could also put 2> error_file.log to get a separate System.err.println() output.

Long term though you should use a logging framework through like log4j or the java logging framework.

If you want to watch the output then as it grows, you can do a tail -f whatever_you_want_output.log

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top