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!
varias formas:
anexando &
en la parte posterior. Sin embargo, al usar esto, el programa aún finalizará si cerró el terminal que inició el programa.
Inicie una screen
sesión e inicie el programa dentro de ella; puede separar la screen
sesió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.
Use el disown
control 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.
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.
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
El operador & forzará el proceso a ejecutarse en segundo plano, luego puede ejecutar el comando 'superior' para ver que se está ejecutando.
fuente
Puede ejecutar cualquier tarea en segundo plano en Linux agregando un símbolo '&' al final de la línea de comandos, p. Ej.
fuente
Puede usar la versión comunitaria del Java Service Wrapper disponible desde aquí:
http://wrapper.tanukisoftware.org/doc/english/download.jsp
Luego puede hacer que comience al reiniciar:
http://wrapper.tanukisoftware.org/doc/english/launch-nix-boot-debian.html
fuente
Poner
&
al final:java -jar test.jar &
fuente