Linux: processo in un servizio

Sto cercando di rendere un eseguibile Linux come un servizio

Eseguo il mio programma come questo di seguito

java -jar mytestprogram.jar 

crea un processo che viene eseguito continuamente e serve le richieste REST. Ma voglio eseguirlo come servizio in cui posso farlo

 service mytestprogram start service mytestprogram stop service mytestprogram status chkconfig mytestprogram on 

ecc. Qual è il modo più semplice per farlo?

Dipende dal tuo gestore di sistema

il modo più comune per farlo su debian / ubuntu è creare un initscript e posizionarlo in /etc/init.d o /etc/rc/init.d e inserire uno script chiamato mytestprogram in questo.

questo è un esempio initscript:

 #!/bin/sh ### BEGIN INIT INFO # Provides: testone # Required-Start: $local_fs # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: false # Short-Description: Example init script # Description: Start/stop an example script ### END INIT INFO DESC="test script" NAME=testone #DAEMON= do_start() { echo "starting!"; } do_stop() { echo "stopping!" } case "$1" in start) do_start ;; stop) do_stop ;; esac exit 0 

Ti suggerisco di guardare alcuni script in quella directory, è semplice se sai bash un po ‘;)

Ecco uno script di shell di esempio (assicurati di sostituire il nome MAT con il nome dell’applicazione):

 #!/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