GNU/Linux >> Tutoriales Linux >  >> Linux

Ejecute una aplicación Java como servicio en Linux

Escribí otro envoltorio simple aquí:

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

Puede seguir un tutorial completo para init.d aquí y para systemd (ubuntu 16+) aquí

Si necesita el registro de salida, reemplace el 2

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

líneas para

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

Una solución simple es crear un script start.sh que ejecute Java a través de nohup y luego almacene el PID en un archivo:

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

Luego, su script de parada stop.sh leería el PID del archivo y eliminaría la aplicación:

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

Por supuesto, he omitido algunos detalles, como verificar si el proceso existe y eliminar pid.txt si has terminado.


El script de inicio del servicio de Linux se almacena en /etc/init.d . Puedes copiar y personalizar /etc/init.d/skeleton archivo y luego llamar

service [yourservice] start|stop|restart

consulte http://www.ralfebert.de/blog/java/debian_daemon/. Es para Debian (también para Ubuntu) pero se adapta a más distribución.


Linux
  1. Servicio del sistema operativo Linux 'dhcpd'

  2. Servicio de sistema operativo Linux 'nfs'

  3. Servicio del sistema operativo Linux 'microcode_ctl'

  4. Servicio de sistema operativo Linux 'NetFS'

  5. Servicio de sistema operativo Linux 'ldap'

Cómo ejecutar Shell Script como servicio SystemD en Linux

Servicio del sistema operativo Linux 'iptables'

Servicio de sistema operativo Linux 'red'

Servicio de sistema operativo Linux 'mapa de puertos'

Servicio de SO Linux 'auditoría'

Servicio del sistema operativo Linux 'hplip'