Il y a une chose cruciale que vous devez faire après avoir ajouté un &
à la fin de la commande. Le processus est toujours lié au terminal. Vous devez exécuter disown
après avoir exécuté la commande java.
java -jar yourApp.jar > log.txt &
disown
Maintenant, vous pouvez fermer le terminal.
Il existe plusieurs façons d'y parvenir :
nohup java -server myApplication.jar > /log.txt
- C'est assez simple. Cela mettra simplement l'application en arrière-plan. Cela fonctionnera, mais ce n'est tout simplement pas une très bonne façon de le faire.- Utilisez un wrapper shell et l'application démon OR ci-dessus. Cette approche est utilisée par de nombreux projets open source et convient parfaitement à la plupart des scénarios. De plus, il peut être inclus dans
init.d
et le niveau d'exécution requis avec des commandes régulières de démarrage, d'arrêt et d'état. Je peux fournir un exemple si nécessaire. - Créez votre propre serveur démon en utilisant Java Service Wrapper ou Apache Jakarta Commons Daemon. Encore une fois - les deux sont extrêmement populaires, bien testés et fiables. Et disponible pour Linux et Windows ! Celui d'Apache Commons est utilisé par le serveur Tomcat ! De plus, il y a Akuma.
Personnellement, j'opterais pour la solution 2 ou 3 si vous avez besoin d'utiliser ce serveur à l'avenir et/ou de le distribuer aux clients, utilisateurs finaux, etc. nohup
est bon si vous devez exécuter quelque chose et n'avez pas le temps de développer une solution plus complexe pour le problème.
Annonce 2 :
Les meilleurs scripts, utilisés par de nombreux projets, peuvent être trouvés ici.
Pour Debian/Ubuntu, on peut utiliser un script très simple basé sur start-stop-daemon
. En cas de doute, il y a /etc/init.d/skeleton
on peut modifier.
#!/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