2012-08-24 14 views
55

Ho bisogno di eseguire un jar java nel server per comunicare tra due applicazioni. Ho scritto due script di shell per eseguirlo, ma una volta avviato lo script non posso arrestare/terminare il processo. Se si preme ctrl + C o si chiude la console, il server si spegne. Qualcuno potrebbe aiutarmi a modificare questo script per funzionare come un normale server?Eseguire il file jar java su un server come processo in background

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

risposta

114

si può provare questo:

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

Il & simbolo, cambia il programma per l'esecuzione in background.

L'utilità nohup esegue il comando passato come argomento eseguito in background anche dopo la disconnessione.

+0

Grazie Anton, sto fermando il server eliminando il processo id.i non penso che sia la cosa migliore da fare.è questo il comando di fermare il server? –

+3

Risposta breve: dipende dal server. Risposta lunga: per quanto ne so, non esiste un modo sicuro per arrestare un processo senza il processo che supporta tali interruzioni. Ad esempio, se si tratta di un server Web terminato da un segnale esterno, c'è sempre la possibilità che alcune richieste andranno perse. Un modo per risolvere questo problema è implementare una funzione di terminazione aggraziata nel server stesso, ad es. elaborando un tipo speciale di richieste. Quindi, il server può essere terminato inviandogli una richiesta di quel tipo speciale. Altrimenti, uccidere il processo tramite il suo ID è il modo semplice. –

20

Se stai usando Ubuntu e hanno "Upstart" (http://upstart.ubuntu.com/).you può provare questo:

Creare /var/init/yourservice.conf

con il seguente contenuto

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 

Ora è possibile eseguire i comandi service yourservice start e service yourservice stop. È possibile tail tail /var/log/yourservice.log per verificare che funzioni.

Se si desidera solo per eseguire il vaso dalla console senza monopolizzare la finestra della console, si può solo fare:

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

È un servizio systemd? Questa domanda non è etichettata come linux e pochissime distribuzioni hanno systemd di default. – jordanm

+1

Modificherò la domanda per dire che questo sta usando "upstart" che è incluso in ubuntu. – Strelok

+1

Credo che per l'ultimo consiglio se vuoi che venga eseguito in background e che la shell sia stata rilasciata, dovresti fare: 'java -jar /web/server.jar> /var/log/yourservice.log 2> & 1 & ' – Montaro

14

Systemd che ora corre nella maggior parte delle distribuzioni

Fase 1:

Trova il tuo servizi definiti dall'utente mio era a /usr/lib/systemd/system/

Fase 2:

Creare un file di testo con il tuo editor di testo preferito chiamalo whatever_you_want.service

Fase 3:

Put seguente Template al file whatever_you_want.service

[Unit] 
Description=webserver Daemon 

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

[Install] 
WantedBy=multi-user.target 

Fase 4:

Eseguire il servizio
come super utente

$ 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 
Problemi correlati