简体   繁体   中英

Startup Script to Run a Jar

I have a fat jar file that that I want to control by running it as a service. I'm not a shell script expert, but took some inspiration from this blog post:

http://vertx.io/blog/vert-x-3-init-d-script/

I then modified it a bit to my needs as below:

#!/bin/bash

###
# chkconfig: 345 20 80
# description: Vert.x application service script
# processname: java
#
# Installation (CentOS):
# copy file to /etc/init.d
# chmod +x /etc/init.d/my-vertx-application
# chkconfig --add /etc/init.d/my-vertx-application
# chkconfig my-vertx-application on
#
# Installation (Ubuntu):
# copy file to /etc/init.d
# chmod +x /etc/init.d/my-vertx-application
# update-rc.d my-vertx-application defaults
#
#
# Usage: (as root)
# service my-vertx-application start
# service my-vertx-application stop
# service my-vertx-application status
#
###

# The directory in which your application is installed
APPLICATION_DIR="/Users/joe/Desktop/temp/tsdb-kafka-consumer"
# The fat jar containing your application
APPLICATION_JAR="tsdb-kafka-consumer-0.1.0-SNAPAHOT.jar"
# The application argument such as -Dfoo=bar ...
APPLICATION_ARGS="-Dlogback.configurationFile=prod-logger.xml -Dconfig.resource=application.integration.conf"
# The Java command to use to launch the application (must be java 8+)
#JAVA=/opt/java/java/bin/java

# ***********************************************
LOG_FILE="${APPLICATION_DIR}"
RUNNING_PID="${APPLICATION_DIR}"/RUNNING_PID
# ***********************************************

# colors
red='\e[0;31m'
green='\e[0;32m'
yellow='\e[0;33m'
reset='\e[0m'

echoRed() { echo -e "${red}$1${reset}"; }
echoGreen() { echo -e "${green}$1${reset}"; }
echoYellow() { echo -e "${yellow}$1${reset}"; }

# Check whether the application is running.
# The check is pretty simple: open a running pid file and check that the process
# is alive.
isrunning() {
  # Check for running app
  if [ -f "$RUNNING_PID" ]; then
    proc=$(cat $RUNNING_PID);
    if /bin/ps --pid $proc 1>&2 >/dev/null;
    then
      return 0
    fi
  fi
  return 1
}

start() {
  if isrunning; then
    echoYellow "The Vert.x application is already running"
    return 0
  fi

  pushd $APPLICATION_DIR > /dev/null
  nohup java $APPLICATION_ARGS -jar $APPLICATION_DIR/$APPLICATION_JAR > $LOG_FILE 2>&1 &
  echo $! > ${RUNNING_PID}
  popd > /dev/null

  if isrunning; then
    echoGreen "Kafka Consumer Application started"
    exit 0
  else
    echoRed "Kafka Consumer Application has not started - check log"
    exit 3
  fi
}

restart() {
  echo "Restarting Kafka Consumer Application"
  stop
  start
}

stop() {
  echoYellow "Stopping Kafka Consumer Application"
  if isrunning; then
    kill `cat $RUNNING_PID`
    rm $RUNNING_PID
  fi
}

status() {
  if isrunning; then
    echoGreen "Kafka Consumer Application is running"
  else
    echoRed "Kafka Consumer Application is either stopped or inaccessible"
  fi
}

case "$1" in
start)
    start
;;

status)
   status
   exit 0
;;

stop)
    if isrunning; then
    stop
    exit 0
    else
    echoRed "Application not running"
    exit 3
    fi
;;

restart)
    stop
    start
;;

*)
    echo "Usage: $0 {status|start|stop|restart}"
    exit 1
esac

When I tried running this script, I got the following error:

Joes-MacBook-Pro:script joe$ sh ./run.sh start
/bin/ps: illegal option -- -
usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
          [-g grp[,grp...]] [-u [uid,uid...]]
          [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]
       ps [-L]
./run.sh: line 73: /Users/joe/Desktop/temp/tsdb-kafka-consumer: Is a directory
/bin/ps: illegal option -- -
usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
          [-g grp[,grp...]] [-u [uid,uid...]]
          [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]
       ps [-L]
-e \e[0;31mKafka Consumer Application has not started - check log\e[0m

What is here the problem? Any suggestions?

The --pid parameter is invalid on your OSX. You should change ps --pid on isrunning() to ps -p . This will work on Linux and OSX.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM