137 votes

Exécuter une application Java en tant que service sous Linux

J'ai écrit une application serveur Java qui fonctionne sur une solution Linux standard hébergée virtuellement. L'application fonctionne en permanence en écoutant les connexions de socket et en créant de nouveaux gestionnaires pour elles. Il s'agit d'une implémentation côté serveur d'une application client-serveur.

Je le démarre en l'incluant dans le programme de démarrage. rc.local script du serveur. Cependant, une fois lancé, je ne sais pas comment y accéder pour l'arrêter et si je veux installer une mise à jour, je dois donc redémarrer le serveur pour redémarrer l'application.

Sur un PC Windows, pour ce type d'application, je pourrais créer un service Windows que je pourrais arrêter et démarrer à ma guise. Existe-t-il quelque chose de semblable sur une machine Linux, de sorte que si je démarre cette application, je puisse l'arrêter et la redémarrer sans avoir à redémarrer complètement le serveur.

Mon application s'appelle WebServer.exe. Elle est lancée au démarrage du serveur en l'incluant dans mon fichier rc.local comme tel :

java -jar /var/www/vhosts/myweb.com/phpserv/WebServer.jar &

Je suis un peu novice en matière de Linux, donc tout exemple serait apprécié, quel que soit le message. Cependant, j'ai un accès SSH et un accès FTP complet à la boîte pour installer les mises à jour, ainsi qu'un accès à un panneau Plesk.

5voto

yglodt Points 532

Se référant à Application Spring Boot en tant que service également, j'opterais pour le systemd car c'est la plus simple, la moins verbeuse et la mieux intégrée dans les distributions modernes (et même celles qui ne le sont pas comme CentOS 7.x).

4voto

Alan Thompson Points 325

4voto

Voici un exemple de script script (veillez à remplacer le nom MATH par le nom de votre application) :

#!/bin/bash

### BEGIN INIT INFO
# Provides:                 MATH
# Required-Start:           $java
# Required-Stop:            $java
# Short-Description:        Start and stop MATH service.
# Description:              -
# Date-Creation:            -
# Date-Last-Modification:   -
# Author:                   -
### END INIT INFO

# Variables
PGREP=/usr/bin/pgrep
JAVA=/usr/bin/java
ZERO=0

# Start the MATH
start() {
    echo "Starting MATH..."
    #Verify if the service is running
    $PGREP -f MATH > /dev/null
    VERIFIER=$?
    if [ $ZERO = $VERIFIER ]
    then
        echo "The service is already running"
    else
        #Run the jar file MATH service
        $JAVA -jar /opt/MATH/MATH.jar > /dev/null 2>&1 &
        #sleep time before the service verification
        sleep 10
        #Verify if the service is running
        $PGREP -f MATH  > /dev/null
        VERIFIER=$?
        if [ $ZERO = $VERIFIER ]
        then
            echo "Service was successfully started"
        else
            echo "Failed to start service"
        fi
    fi
    echo
}

# Stop the MATH
stop() {
    echo "Stopping MATH..."
    #Verify if the service is running
    $PGREP -f MATH > /dev/null
    VERIFIER=$?
    if [ $ZERO = $VERIFIER ]
    then
        #Kill the pid of java with the service name
        kill -9 $($PGREP -f MATH)
        #Sleep time before the service verification
        sleep 10
        #Verify if the service is running
        $PGREP -f MATH  > /dev/null
        VERIFIER=$?
        if [ $ZERO = $VERIFIER ]
        then
            echo "Failed to stop service"
        else
            echo "Service was successfully stopped"
        fi
    else
        echo "The service is already stopped"
    fi
    echo
}

# Verify the status of MATH
status() {
    echo "Checking status of MATH..."
    #Verify if the service is running
    $PGREP -f MATH > /dev/null
    VERIFIER=$?
    if [ $ZERO = $VERIFIER ]
    then
        echo "Service is running"
    else
        echo "Service is stopped"
    fi
    echo
}

# Main logic
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart|reload)
        stop
        start
        ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|reload}"
    exit 1
esac
exit 0

3voto

DuffJ Points 403

De Application Spring Boot en tant que service Je peux vous recommander le logiciel Python supervisord l'application. Voir la question de stack overflow pour plus d'informations. C'est très simple à mettre en place.

2voto

Mori Bellamy Points 101

D'autres réponses font un bon travail en donnant des scripts personnalisés et des configurations en fonction de votre plateforme. En plus de ces réponses, voici les programmes matures et spécialisés dont je connais l'existence :

  • JSW de TanukiSoftware
  • YAJSW est un clone open source du modèle ci-dessus. Il est écrit en Java, et c'est un processus nounou qui gère le processus enfant (votre code) selon les configurations. Il fonctionne sous Windows / linux.
  • JSVC est une application native. Il s'agit également d'un processus nounou, mais il invoque votre application enfant par l'intermédiaire de la JNI, plutôt que comme un sous-processus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X