Create A Service to Run Jar File In Background As System Service on AWS EC2 – Devstringx

Back to Blog
AWS ec2

Create A Service to Run Jar File In Background As System Service on AWS EC2 – Devstringx

Prerequisite:

  1. Java should already have
  2. Open and connect AWS ec2 instance using terminal
  3. Reach out root folder where the domain is pointing out for me it’s /var/www/HTML/
  4. Take pull the latest Spring Boot code from git https://bitbucket.org/***
  5. MVN clean install – this will convert java code with all its dependencies in a jar file
    (SUDO) java -jar target/YOUR_FILE_NAME.jar (target is a folder on root)

Problem: We found a challenge while running java -jar *.jar on AWS ec2 instance in the background

Solution: Create a system service to run the Jar file in the background

Ubuntu/Linux has an in-built mechanism to create custom services and enable them to start on system boot time and start/stop them as a service.

Create a bash script to run jar :

Replace the customservicename with your own service name

  1. Create a vi or nano file under /usr/local/bin/ by running the following commandeg: sudo vi /usr/local/bin/customservicename.shThis will open a file with the name customservicename.sh.
  1. Paste the following Code in opened sh.
    In the below code replace the customservicename with your own service name,
    JAR_FILE_PATH(Absolute Path to your jar File), and choose a PID_NAME_PATH(just replace CUSTOM_SERVICE_NAME to your customservicename keeping -PID at the end ) for the file you are going to use to store your service ID.

The only changes needed are to the first 3 variables.

#!/bin/sh
CUSTOM_SERVICE_NAME=customservicename
JAR_FILE_PATH=/var/www/html/target/YourJavaApplication.jar
PID_NAME_PATH=/tmp/customservicename-pid
case $1 in
start)
   echo "Starting $CUSTOM_SERVICE_NAME ..."
   if [ ! -f $PID_NAME_PATH ]; then
      nohup java -jar $JAR_FILE_PATH /tmp 2>> /dev/null >>/dev/null & echo $! > $PID_NAME_PATH
      echo "$CUSTOM_SERVICE_NAME started ..."
   else
      echo "$CUSTOM_SERVICE_NAME is already running ..."
   fi
   ;;
stop)

if [ -f $PID_NAME_PATH ]; then
   PID=$(cat $PID_NAME_PATH);
      echo "$CUSTOM_SERVICE_NAME stopping ..."
   kill $PID;
   echo "$CUSTOM_SERVICE_NAME stopped ..."
   rm $PID_NAME_PATH
else
   echo "$CUSTOM_SERVICE_NAME is not running ..."
fi
;;

restart)
if [ -f $PID_NAME_PATH ]; then
   PID=$(cat $PID_NAME_PATH);
   echo "$CUSTOM_SERVICE_NAME stopping ...";
   kill $PID;
   echo "$CUSTOM_SERVICE_NAME stopped ...";
   rm $PID_NAME_PATH
   echo "$CUSTOM_SERVICE_NAME starting ..."
   nohup java -jar $JAR_FILE_PATH /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_NAME_PATH
   echo "$CUSTOM_SERVICE_NAME started ..."
else
   echo "$CUSTOM_SERVICE_NAME is not running ..."
fi
;;
esac
    1. Write and quit the above file by pressing the ESC button then:wq! and give execution permissions :eg: sudo chmod +x /usr/local/bin/customservicename.sh

Read Also:- Setting Up Jenkins on Amazon EC2 Ubuntu Instance


Use The Following Commands to Test Whether Java Application Is Working:

     /usr/local/bin/./customservicename.sh start      
     /usr/local/bin/./customservicename.sh stop      
     /usr/local/bin/./customservicename.sh start      
     /usr/local/bin/./customservicename.sh restart

 

If all the above commands do not give an error then we move forward to create a service

  1. Create a file under /etc/system/system/ with nano or vi and paste the example script below.
         Eg. sudo vi /etc/systemd/system/customservicename.service
  2. Insert the following code in customservicename:
    [Unit]    
           Description = My Java Service    
           After network.target = customservicename.service 
    
    [Service]     
          Type = forking     
          Restart=always       
          RestartSec=1     
          SuccessExitStatus=143     
          ExecStart = /usr/local/bin/customservicename.sh start     
          ExecStop = /usr/local/bin/customservicename.sh stop     
          ExecReload = /usr/local/bin/customservicename.sh reload 
    
    [Install]     
      WantedBy=multi-user.target

     

  3. Write and quit this file by pressing the ESC button then:wq!
    Now Service is all set up.

You can enable/start/stop your Java Application as a Service using the following commands:

sudo systemctl daemon-reload
sudo systemctl enable customservicename
sudo systemctl start  customservicename
sudo systemctl stop   customservicename

 

This should get Java Application up and running in the background as a System Service.

Share this post

Back to Blog

Hire A Resource