Es gibt eine entscheidende Sache, die Sie tun müssen, nachdem Sie einen &
hinzugefügt haben am Ende des Befehls. Der Prozess ist weiterhin mit dem Terminal verbunden. Sie müssen disown
ausführen nachdem Sie den Java-Befehl ausgeführt haben.
java -jar yourApp.jar > log.txt &
disown
Jetzt können Sie das Terminal schließen.
Es gibt mehrere Möglichkeiten, wie Sie so etwas erreichen können:
nohup java -server myApplication.jar > /log.txt
- das ist ziemlich einfach. Es wird nur die Anwendung in den Hintergrund stellen. Das wird funktionieren, aber es ist einfach kein sehr guter Weg, dies zu tun.- Verwenden Sie einen Shell-Wrapper und die obige OR-Daemon-App. Dieser Ansatz wird von vielen Open-Source-Projekten verwendet und ist für die meisten Szenarien recht gut. Zusätzlich kann es in
init.d
eingebunden werden und benötigtem Runlevel mit regulären Start-, Stopp- und Statusbefehlen. Ich kann bei Bedarf ein Beispiel liefern. - Erstellen Sie Ihren eigenen Daemon-Server mit Java Service Wrapper oder Apache Jakarta Commons Daemon. Auch hier sind beide äußerst beliebt, gut getestet und zuverlässig. Und sowohl für Linux als auch für Windows verfügbar! Der von Apache Commons wird vom Tomcat-Server verwendet! Zusätzlich gibt es noch Akuma.
Ich persönlich würde Lösung 2 oder 3 wählen, wenn Sie diesen Server in Zukunft verwenden und/oder an Clients, Endbenutzer usw. verteilen müssen. nohup
ist gut, wenn Sie etwas ausführen müssen und keine Zeit haben, eine komplexere Lösung für das Problem zu entwickeln.
Anzeige 2:
Die besten Skripte, die von vielen Projekten verwendet werden, finden Sie hier.
Für Debian/Ubuntu kann man ein sehr einfaches Skript verwenden, das auf start-stop-daemon
basiert . Im Zweifel gibt es /etc/init.d/skeleton
man kann modifizieren.
#!/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