GNU/Linux >> Linux Esercitazione >  >> Linux

Processo in background in Linux

C'è una cosa fondamentale che devi fare dopo aver aggiunto un & alla fine del comando. Il processo è ancora collegato al terminale. Devi eseguire disown dopo aver eseguito il comando java.

java -jar yourApp.jar > log.txt &
disown

Ora puoi chiudere il terminale.


Esistono diversi modi per ottenere una cosa del genere:

  1. nohup java -server myApplication.jar > /log.txt - Questo è piuttosto semplice. Metterà semplicemente l'applicazione in background. Funzionerà, ma non è un ottimo modo per farlo.
  2. Utilizza uno shell wrapper e l'app daemon OR di cui sopra. Questo approccio è utilizzato da molti progetti open source ed è abbastanza buono per la maggior parte degli scenari. Inoltre può essere incluso in init.d e livello di esecuzione richiesto con comandi regolari di avvio, arresto e stato. Posso fornire un esempio se necessario.
  3. Crea il tuo server daemon utilizzando Java Service Wrapper o Apache Jakarta Commons Daemon. Ancora una volta, entrambi sono estremamente popolari, ben testati e affidabili. E disponibile sia per Linux che per Windows! Quello di Apache Commons è usato dal server Tomcat! Inoltre c'è Akuma.

Personalmente sceglierei la soluzione 2 o 3 se hai bisogno di utilizzare questo server in futuro e/o distribuirlo a clienti, utenti finali, ecc. nohup va bene se hai bisogno di eseguire qualcosa e non hai tempo per sviluppare una soluzione più complessa per il problema.

Annuncio 2:

I migliori script, utilizzati da molti progetti, possono essere trovati qui.

Per Debian/Ubuntu si può usare uno script molto semplice basato su start-stop-daemon . In caso di dubbio c'è /etc/init.d/skeleton si può modificare.

#!/bin/sh

DESC="Description"
NAME=YOUR_NAME
PIDFILE=/var/run/$NAME.pid
RUN_AS=USER_TO_RUN
COMMAND=/usr/bin/java -- -jar YOUR_JAR

d_start() {
    start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND
}

d_stop() {
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    if [ -e $PIDFILE ]
        then rm $PIDFILE
    fi
}

case $1 in
    start)
    echo -n "Starting $DESC: $NAME"
    d_start
    echo "."
    ;;
    stop)
    echo -n "Stopping $DESC: $NAME"
    d_stop
    echo "."
    ;;
    restart)
    echo -n "Restarting $DESC: $NAME"
    d_stop
    sleep 1
    d_start
    echo "."
    ;;
    *)
    echo "usage: $NAME {start|stop|restart}"
    exit 1
    ;;
esac

exit 0

Linux
  1. Linux:come limitare un processo a un core della CPU in Linux??

  2. Esempi di comandi echo in Linux

  3. Processo di creazione di Linux?

  4. Creazione di un demone in Linux

  5. Linux:processo in un servizio

Comando Pstree in Linux

Kill Command in Linux

Comando Echo in Linux

Come ottenere l'utilizzo della CPU di un singolo processo in Linux

Monitoraggio dei processi su Linux

Come inviare processi in background su Linux