Operations 6 min read

How to Write a Shell Script for Deploying a Java Backend Application Without Docker

This guide explains how to create a shell script to deploy a Java backend application without Docker, covering variable configuration, start/stop/restart functions, log handling, and command-line usage, along with packaging and troubleshooting steps.

Selected Java Interview Questions
Selected Java Interview Questions
Selected Java Interview Questions
How to Write a Shell Script for Deploying a Java Backend Application Without Docker

1. Introduction

In many development projects the client may forbid the use of Docker, requiring direct deployment on a machine. This article shows how to write a shell script to automate the deployment of a Java project (using the Ruoyi example) without Docker.

2. Writing the Shell Script

Define three configurable variables: port=9999 , jar_name=blockchain.jar , and log_path=./log/$(date +%y%m%d)blockchain.log . Replace them with your own values.

#!/bin/sh
port=9999  # define variable, no spaces around =
jar_name=blockchain.jar
log_path=./log/$(date +%y%m%d)blockchain.log

# tip function
tips(){
  echo "-------------------------------------"
  echo ""
  echo "项目端口: ${port}"
  echo "项目jar目录: ${jar_name}"
  echo ""
  echo "你可以使用如下参数进行操作"
  echo "-status -查看当前项目运行状态"
  echo "-start  -启动当前项目"
  echo "-stop   -停止当前项目"
  echo "-restart -重启当前项目"
  echo ""
  echo "-------------------------------------"
}

# view status
status(){
  pid=`netstat -apn | grep $port | awk '{print $7}' | cut -d/ -f 1`
  if [ -z "${pid}" ]; then
    echo "没有项目在运行"
  else
    echo "项目正在运行中"
  fi
}

# start project
start(){
  if [ -n "$1" ]; then
    my_profile="$1"
  fi
  echo "  >>> begining lauch project ${jar_name} ....."
  pid=$(jps -l|grep $jar_name|cut -d ' ' -f1)
  echo "  >>> source project process id : $pid"
  if [ $pid ]; then
    echo "  >>> kill source project ......"
    kill -9 $pid
    sleep 3
    echo "  >>> restart project ......"
  else
    echo "  >>> start project......"
  fi
  nohup java -jar $jar_name > $log_path 2>&1 &
  spin='-|/'
  i=0
  until [ -f $log_path ]; do
    i=$(( (i+1) %4 ))
    printf "\r[${spin:$i:1}]"
    sleep 0.1
done
  printf "\n\n >>> tail -f $log_path\n\n"
  tail -5f $log_path
}

# stop project
stop(){
  pid=`netstat -apn | grep $port | awk '{print $7}' | cut -d/ -f 1`
  if [ -z "${pid}" ]; then
    echo "没有项目在运行,请先启动"
  else
    kill -9 $pid
    echo "已杀死端口为 ${port} 的应用"
  fi
}

# restart project
restart(){
  pid=`netstat -apn | grep $port | awk '{print $7}' | cut -d/ -f 1`
  echo "正在杀死端口 ${port} 的pid ${pid} 中..."
  if [ -z "${pid}" ]; then
    echo "项目未启动"
  else
    kill -9 $pid
  fi
  sleep 5
  start
  echo "项目重启成功!"
}

# command line options
case "$1" in
  "-status")
    status
    ;;
  "-start")
    start
    ;;
  "-stop")
    stop
    ;;
  "-restart")
    restart
    ;;
  *)
    tips
    ;;
esac

3. Project Packaging and Upload

Package the project into blockchain.jar and upload both the JAR and the launch script to the server. Create a log directory to store logs as shown in the accompanying screenshots.

4. Executing the Script

Run the script with the desired option, for example:

# start the project (may be slow due to Maven downloads)
sh ./launch.sh -start

If errors occur, check the log file blockchain.log in the log directory.

5. Common Commands

# check if the project started successfully
sh ./launch.sh -status

# stop the project
sh ./launch.sh -stop
backendJavaoperationsDeploymentshellscript
Selected Java Interview Questions
Written by

Selected Java Interview Questions

A professional Java tech channel sharing common knowledge to help developers fill gaps. Follow us!

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.