
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 de antemano!
Respuesta1
varias maneras:
añadiendo
&
en la parte posterior. Sin embargo, al usar esto, el programa aún finalizará si cerró la terminal que inició el programa.Inicie una
screen
sesión e inicie el programa dentro de ella; puedes desconectar lascreen
sesión y cerrar la terminal. Más adelante, podrá 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 podrá hacer nada al respecto.Utilice
disown
el control de trabajo desde su shell. Esto separará la tarea de su tty y su programa no finalizará cuando se cierre el tty. Sin embargo, no creo que haya ninguna forma de recuperar un trabajo repudiado.
Respuesta2
Un símbolo de línea de comando que siempre he usado durante tiempos de ejecución prolongados para durar hasta los cierres de sesión es "nohup", por lo que en su caso es
nohup java -jar test.jar &
El & es importante para que puedas ejecutar otro shell. Creo que esto no durará durante los reinicios.
Respuesta3
Si por "en todo momento" quiere decir que se inicia cuando se inicia la máquina, deberá iniciarlo como parte de los scripts de inicio. La forma sucia de hacer esto es agregar
java -jar test.jar >/dev/null 2>&1 &
/etc/rc.local
(o reemplácelo con /dev/null
su archivo de registro favorito).
Lo mejor sería crear un init.d
script que se inicie en los niveles de ejecución apropiados (es posible que no lo desee en los niveles de ejecución 0, 1 o 6, por ejemplo). De esa manera, también puedes reiniciarlo automáticamente si falla y tener una interfaz más agradable para detenerlo temporalmente.
Pequeños ejemplos enhttp://www.howtoforge.com/forums/archive/index.php/t-3628.html
Gran explicación enhttp://developer.novell.com/wiki/index.php/Writing_Init_Scripts
Respuesta4
Puede ejecutar cualquier tarea en segundo plano en Linux agregando un símbolo '&' al final de la línea de comando, por ejemplo
java -jar test.jar &