#!/bin/bash
#
#    .   ____          _            __ _ _
#   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
#  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
#   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
#    '  |____| .__|_| |_|_| |_\__, | / / / /
#   =========|_|==============|___/=/_/_/_/
#   :: Spring Boot Startup Script ::
#

### BEGIN INIT INFO
# Provides:          {{initInfoProvides:spring-boot-application}}
# Required-Start:    {{initInfoRequiredStart:$remote_fs $syslog $network}}
# Required-Stop:     {{initInfoRequiredStop:$remote_fs $syslog $network}}
# Default-Start:     {{initInfoDefaultStart:2 3 4 5}}
# Default-Stop:      {{initInfoDefaultStop:0 1 6}}
# Short-Description: {{initInfoShortDescription:Spring Boot Application}}
# Description:       {{initInfoDescription:Spring Boot Application}}
# chkconfig:         {{initInfoChkconfig:2345 99 01}}
### END INIT INFO

[[ -n "$DEBUG" ]] && set -x

# Initialize variables that cannot be provided by a .conf file
WORKING_DIR="$(pwd)"
# shellcheck disable=SC2153
[[ -n "$JARFILE" ]] && jarfile="$JARFILE"
[[ -n "$APP_NAME" ]] && identity="$APP_NAME"

# Follow symlinks to find the real jar and detect init.d script
cd "$(dirname "$0")" || exit 1
[[ -z "$jarfile" ]] && jarfile=$(pwd)/$(basename "$0")
while [[ -L "$jarfile" ]]; do
  [[ "$jarfile" =~ init\.d ]] && init_script=$(basename "$jarfile")
  jarfile=$(readlink "$jarfile")
  cd "$(dirname "$jarfile")" || exit 1
  jarfile=$(pwd)/$(basename "$jarfile")
done
jarfolder="$( (cd "$(dirname "$jarfile")" && pwd -P) )"
cd "$WORKING_DIR" || exit 1

# ANSI Colors
echoRed() { echo $'\e[0;31m'"$1"$'\e[0m'; }
echoGreen() { echo $'\e[0;32m'"$1"$'\e[0m'; }
echoYellow() { echo $'\e[0;33m'"$1"$'\e[0m'; }

# Determine the user to run as if we are root
# shellcheck disable=SC2012
[[ $(id -u) == "0" ]] && run_user=$(ls -ld "$jarfile" | awk '{print $3}')

# Find Java
if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
    javaexe="$JAVA_HOME/bin/java"
elif type -p java > /dev/null 2>&1; then
    javaexe=$(type -p java)
elif [[ -x "/usr/bin/java" ]];  then
    javaexe="/usr/bin/java"
else
    echo "Unable to find Java"
    exit 1
fi


## 配置service
service() {

  tempCahr='$'

  ## 创建service文件
  working_dir=$(dirname "$jarfile")
  service_file="/etc/systemd/system/$1.service"

  echo "[Unit]" > $service_file
  echo "Description=$1" >> $service_file
  echo "After=rc-local.service network.target remote-fs.target nss-lookup.target" >> $service_file

  echo "" >> $service_file
  echo "[Service]" >> $service_file
  echo "Type=forking" >> $service_file
  echo "WorkingDirectory=$working_dir" >> $service_file
  echo "ExecStart=/bin/sh -c '$javaexe -Xms64m -Xmx128m -Dserver.port=$2 -Dspring.profiles.active=$3 -jar $jarfile > /dev/null 2>&1 &'" >> $service_file
  echo "ExecReload=/bin/kill -s HUP ${tempCahr}MAINPID" >> $service_file
  echo "ExecStop=/bin/kill -s QUIT ${tempCahr}MAINPID" >> $service_file

  echo "" >> $service_file
  echo "[Install]" >> $service_file
  echo "WantedBy=multi-user.target" >> $service_file
  systemctl daemon-reload

  ## 自启动
  systemctl enable $1

  ## 配置成功
  echoGreen "config success, use  'systemctl start $1 ' to start"

}
service "$@"
exit 0
