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:
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.- 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. - 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
Jaký je význam úvodních a koncových podtržítek v identifikátorech jádra Linuxu?
Jak stáhnout soubor ze serveru pomocí SSH?