Ejecute Jar en segundo plano en Linux

12

Tengo un jar que se ejecuta para siempre (bucle infinito con hilo de escucha de socket) y necesito que se ejecute en segundo plano en todo momento. Un ejemplo sería: "java -jar test.jar" ¿Cómo hago esto? ¡Gracias por adelantado!

Benny
fuente

Respuestas:

8

varias formas:

  1. anexando &en la parte posterior. Sin embargo, al usar esto, el programa aún finalizará si cerró el terminal que inició el programa.

  2. Inicie una screensesión e inicie el programa dentro de ella; puede separar la screensesión y cerrar la terminal. Más tarde, puede volver a conectarse a la sesión y encontrarse nuevamente en la consola como si hubiera estado allí todo el tiempo. Sin embargo, deberá iniciar una sesión de pantalla antes de ejecutar el programa, y ​​si olvidó hacerlo, no puede hacer nada al respecto.

  3. Use el disowncontrol del trabajo desde su shell. Esto desconectará la tarea de su tty y su programa no terminará cuando se cierre el tty. Sin embargo, no creo que haya ninguna manera de volver a adjuntar un trabajo rechazado.

Lie Ryan
fuente
13

Un indicador de línea de comando que siempre he usado para que los tiempos de ejecución largos duren hasta el cierre de sesión es "nohup", por lo que en su caso es

nohup java -jar test.jar &

El & es importante para que pueda ejecutar otro shell. Creo que esto no durará a través de reinicios.


fuente
7

Si por "en todo momento" quiere decir que comienza cuando la máquina arranca, deberá iniciarlo como parte de los scripts de tiempo de arranque. La manera sucia de hacer esto es agregar

java -jar test.jar> / dev / null 2> & 1 &

a /etc/rc.local (o reemplace / dev / null con su archivo de registro favorito).

Mejor sería crear un script init.d que se inicie en los niveles de ejecución apropiados (por ejemplo, es posible que no lo desee en los niveles de ejecución 0, 1 o 6). De esa manera, también puede hacer que se reinicie automáticamente si muere y tener una mejor interfaz para detenerlo temporalmente.

Pequeños ejemplos en http://www.howtoforge.com/forums/archive/index.php/t-3628.html

Gran explicación en http://developer.novell.com/wiki/index.php/Writing_Init_Scripts


fuente
Otra posibilidad, si desea que se ejecute solo con permisos de usuario, es ponerlo en cron y usar '@reboot' como hora de ejecución. Ver 'man 5 crontab' para más detalles.
pjz
3
java -jar test.jar &

El operador & forzará el proceso a ejecutarse en segundo plano, luego puede ejecutar el comando 'superior' para ver que se está ejecutando.


fuente
1

Puede ejecutar cualquier tarea en segundo plano en Linux agregando un símbolo '&' al final de la línea de comandos, p. Ej.

java -jar test.jar &

fuente
1

Poner &al final:java -jar test.jar &

František Žiačik
fuente