Using Systemd

sudo pico /etc/systemd/system/service_name.service

[Unit]
Description=Service Name

[Service]
WorkingDirectory=/path/to/app
PIDFile=/tmp/service_name
ExecStart=/usr/lib/jvm/java-8-oracle/bin/java -cp "/path/to/libs/*:/path/to/app/my.jar" com.company.Main
Restart=on-failure
RestartSec=20 5

[Install]
WantedBy=multi-user.target


Using init.d

sudo pico /etc/init.d/service_name

#!/bin/sh
# chkconfig: 2345 90 60

SERVICE_NAME=service_name
PATH_TO_JAR=/path/to/app/my.jar
PATH_TO_LIB=/path/to/libs/*
MAIN_METHOD=com.company.Main
PID_PATH_NAME=/tmp/service_name
LOG_PATH=/path/to/logs/service_name.log
case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        if [ ! -f $PID_PATH_NAME ]; then
            nohup java -cp "$PATH_TO_LIB:$PATH_TO_JAR" $MAIN_METHOD 2>> $LOG_PATH >> $LOG_PATH &
            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 -cp "$PATH_TO_LIB:$PATH_TO_JAR" $MAIN_METHOD 2>> $LOG_PATH >> $LOG_PATH &
            echo $! > $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac