GNU/Linux >> Znalost Linux >  >> Linux

Proces na pozadí v linuxu

Po přidání & musíte udělat jednu zásadní věc na konci příkazu. Proces je stále spojen s terminálem. Musíte spustit disown po spuštění příkazu java.

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

Nyní můžete terminál zavřít.


Existuje několik způsobů, jak něčeho takového dosáhnout:

  1. nohup java -server myApplication.jar > /log.txt - to je docela přímočaré. Pouze to přepne aplikaci na pozadí. Bude to fungovat, ale není to moc dobrý způsob, jak toho dosáhnout.
  2. Použijte shell wrapper a výše uvedenou aplikaci OR démon. Tento přístup používá mnoho open source projektů a je docela dobrý pro většinu scénářů. Navíc může být zahrnut do init.d a požadovanou úroveň běhu s pravidelnými příkazy start, stop a status. V případě potřeby mohu poskytnout příklad.
  3. Sestavte si svůj vlastní démonový server pomocí Java Service Wrapper nebo Apache Jakarta Commons Daemon. Opět – oba jsou mimořádně oblíbené, dobře otestované a spolehlivé. A je k dispozici pro Linux i Windows! Ten z Apache Commons používá server Tomcat! Navíc je tu Akuma.

Osobně bych zvolil řešení 2 nebo 3, pokud budete potřebovat tento server v budoucnu používat a/nebo jej distribuovat klientům, koncovým uživatelům atd. nohup je dobré, pokud potřebujete něco spustit a nemáte čas na vývoj složitějšího řešení problému.

Reklama 2:

Nejlepší skripty, které používá mnoho projektů, naleznete zde.

Pro Debian/Ubuntu lze použít velmi jednoduchý skript založený na start-stop-daemon . V případě pochybností je /etc/init.d/skeleton lze upravit.

#!/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. Proces spouštění Linuxu

  2. Příklady příkazů echo v Linuxu

  3. Linux CreateProcess?

  1. Proces Linuxu na pozadí - Zastaveno v úlohách?

  2. Vytvoření démona v Linuxu

  3. Linux:proces do služby

  1. Linux – Jak omezit proces na jedno jádro CPU v Linuxu?

  2. Linuxový příkaz echo

  3. Proces běžící na pozadí byl v linuxu zabit