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