¿Cómo puedo ejecutar correctamente una aplicación por lotes Java (una aplicación .jar) en segundo plano en una máquina Linux?

¿Cómo puedo ejecutar correctamente una aplicación por lotes Java (una aplicación .jar) en segundo plano en una máquina Linux?

No soy ingeniero de sistemas (soy un desarrollador electrónico de software). Tengo que ejecutar una aplicación Java (una ejecutable.frascoarchivo) en una máquina Linux (Centos 7). Me estoy conectando a un shell a través de SSH. Esta aplicación está enfrascoformatear e implementar una aplicación por lotes y contiene su programador.

Tengo que ejecutarlo en segundo plano en un servidor remoto para que después de salir del shell siga ejecutándose.

Realicé este comando para ejecutar mi aplicación en segundo plano:

java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar &

luego hice clic enCTRL+Cen mi teclado para obtener nuevamente el mensaje del teclado en mi shell.

y aquí el primer comportamiento extraño: obtengo nuevamente el indicador del shell y la posibilidad de insertar un comando, pero si la aplicación registra algo, aparece en el shell. ¿Por qué? Esperaba que mi aplicación todavía se ejecutara en segundo plano.

De todos modos, ahora solicito este comando en mi shell para verificar si mi aplicación se está ejecutando:

[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23307 15.3  1.6 4871172 418980 pts/0  Sl   10:23   0:22 java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar
webadmin 23522  0.0  0.0 112812   980 pts/0    S+   10:25   0:00 grep --color=auto java

Y sí, mi aplicación parece ejecutarse correctamente (la primera).

Luego cierro la conexión a mi shell, vuelvo a iniciar sesión y realizo nuevamente el comando anterior pero ahora obtengo esto:

[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23919  0.0  0.0 112812   980 pts/0    S+   10:27   0:00 grep --color=auto java

Como puede ver, después de eso me desconecto del shell, cuando hago un nuevo inicio de sesión, mi aplicación por lotes parece que no se está ejecutando (y de hecho, mi solicitud de trabajo no se ejecuta).

¿Lo que está mal? ¿Qué me estoy perdiendo? ¿Cuál podría ser una buena manera de ejecutar en segundo plano mi aplicación Java Jar por lotes?

Respuesta1

Debe desasociar el trabajo en segundo plano del shell antes de que finalice el shell.

Cuando ingresó command &, el sistema le proporcionó una identificación del trabajo que se parece a "[1] 25177", donde 1está la identificación del trabajo.

Deberías usar ahora el comando de repudiar. Para el ejemplo anterior, esto sería:

disown 1

O haz todos los trabajos (porque solo tienes uno):

disown

Para obtener más información, consulte, por ejemplo. Linux/Unix: comando renegar.

información relacionada