GNU/Linux >> Linux Esercitazione >  >> Linux

Eseguire un'applicazione Java come servizio su Linux

Ho scritto un altro semplice wrapper qui:

#!/bin/sh
SERVICE_NAME=MyService
PATH_TO_JAR=/usr/local/MyProject/MyJar.jar
PID_PATH_NAME=/tmp/MyService-pid
case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        if [ ! -f $PID_PATH_NAME ]; then
            nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
            echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is already running ..."
        fi
    ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stoping ..."
            kill $PID;
            echo "$SERVICE_NAME stopped ..."
            rm $PID_PATH_NAME
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
    restart)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stopping ...";
            kill $PID;
            echo "$SERVICE_NAME stopped ...";
            rm $PID_PATH_NAME
            echo "$SERVICE_NAME starting ..."
            nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
            echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac 

Puoi seguire un tutorial completo per init.d qui e per systemd (ubuntu 16+) qui

Se hai bisogno del log di output, sostituisci 2

nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &

righe per

nohup java -jar $PATH_TO_JAR >> myService.out 2>&1&

Una soluzione semplice è creare uno script start.sh che esegua Java tramite nohup e quindi memorizzi il PID in un file:

nohup java -jar myapplication.jar > log.txt 2> errors.txt < /dev/null &
PID=$!
echo $PID > pid.txt

Quindi il tuo script stop stop.sh leggerà il PID dal file e chiuderà l'applicazione:

PID=$(cat pid.txt)
kill $PID

Ovviamente ho tralasciato alcuni dettagli, come controllare se il processo esiste e rimuovere pid.txt se hai finito.


Gli script init del servizio Linux sono memorizzati in /etc/init.d . Puoi copiare e personalizzare /etc/init.d/skeleton file, quindi chiama

service [yourservice] start|stop|restart

vedere http://www.ralfebert.de/blog/java/debian_daemon/. È per Debian (quindi anche Ubuntu) ma si adatta a più distribuzioni.


Linux
  1. Servizio del sistema operativo Linux 'dhcpd'

  2. Servizio del sistema operativo Linux "anacron"

  3. Servizio del sistema operativo Linux "iptables"

  4. Sistema operativo Linux Servizio "rete"

  5. Servizio del sistema operativo Linux "portmap"

Come eseguire lo script della shell come servizio SystemD in Linux

Servizio del sistema operativo Linux 'nfs'

Servizio del sistema operativo Linux 'microcode_ctl'

Servizio del sistema operativo Linux "hplip"

Sistema operativo Linux Servizio "smartd"

Servizio del sistema operativo Linux 'irqbalance'