2012-08-24 136 views
55

Necesito ejecutar un jar de Java en el servidor para comunicarme entre dos aplicaciones. He escrito dos scripts de shell para ejecutarlo, pero una vez que inicie ese script, no puedo cerrar/finalizar el proceso. Si presiono ctrl + C o cierro la consola, el servidor se apagará. ¿Alguien podría ayudarme a modificar esta secuencia de comandos para que se ejecute como un servidor normal?Ejecutar el archivo jar de Java en un servidor como proceso de fondo

#!/bin/sh 
java -jar /web/server.jar 
echo $! 
#> startupApp.pid 

Respuesta

114

Usted puede intentar esto:

#!/bin/sh 
nohup java -jar /web/server.jar & 

El símbolo &, cambia el programa para que se ejecute en segundo plano.

La utilidad nohup hace que el comando pase como un argumento ejecutado en segundo plano incluso después de cerrar la sesión.

+0

Gracias Anton, actualmente estoy deteniendo el servidor matando el id del proceso. No creo que sea una buena práctica. ¿Hay un comando para detener el servidor? –

+3

Respuesta corta: depende del servidor. Respuesta larga: hasta donde yo sé, no hay una forma segura de cerrar un proceso sin que el proceso respalde tales cierres tan elegantes. Por ejemplo, si se trata de un servidor web terminado por una señal externa, siempre existe la posibilidad de que se pierdan algunas solicitudes. Una forma de resolver este problema es implementar una función de terminación elegante en el servidor mismo, p. procesando un tipo especial de solicitudes. Entonces, el servidor puede ser terminado enviándole una solicitud de ese tipo especial. De lo contrario, matar el proceso por su ID es la manera más simple. –

20

Si utilizas Ubuntu y tener "Upstart" (http://upstart.ubuntu.com/).you puede probar esto:

Crear /var/init/yourservice.conf

con el siguiente contenido

description "Your Java Service" 
author "You" 

start on runlevel [3] 
stop on shutdown 

expect fork 

script  
    cd /web 
    java -jar server.jar >/var/log/yourservice.log 2>&1 
    emit yourservice_running 
end script 

Ahora puede emitir los comandos service yourservice start y service yourservice stop. Puede alinear /var/log/yourservice.log para verificar que esté funcionando.

Si sólo desea ejecutar su cántaro de la consola sin ella acaparando la ventana de la consola, que sólo puede hacer:

java -jar /web/server.jar > /var/log/yourservice.log 2>&1 
+2

¿Es eso un servicio systemd? Esta pregunta no está etiquetada como linux, y muy pocas distribuciones tienen systemd por defecto. – jordanm

+1

Enmendaré la pregunta para decir que esto está usando "upstart" que está incluido en ubuntu. – Strelok

+1

Creo que para obtener el último consejo, si desea que se ejecute en segundo plano y se libere el shell, debe hacer: 'java -jar /web/server.jar> /var/log/yourservice.log 2> & 1 & ' – Montaro

14

Systemd que ahora se ejecuta en la mayoría de las distribuciones

Paso 1:

Encuentra sus servicios definidos por el usuario mío era en /usr/lib/systemd/system/

Paso 2:

Crear un archivo de texto con su editor de texto favorito llámelo nombre whatever_you_want.service

Paso 3:

Coloca el siguiente Plantilla al archivo whatever_you_want.service

[Unit] 
Description=webserver Daemon 

[Service] 
ExecStart=/usr/bin/java -jar /web/server.jar 
User=user 

[Install] 
WantedBy=multi-user.target 

Paso 4:

Ejecutar el servicio de
como superusuario

$ systemctl start whatever_you_want.service # starts the service 
$ systemctl enable whatever_you_want.service # auto starts the service 
$ systemctl disable whatever_you_want.service # stops autostart 
$ systemctl stop whatever_you_want.service # stops the service 
$ systemctl restart whatever_you_want.service # restarts the service 
Cuestiones relacionadas