| #!/bin/bash | 
 | # | 
 | # controlling script for gc-executor | 
 | export LC_ALL="en_US.UTF-8" | 
 |  | 
 | # assume that the current script is in the bin folder | 
 | readonly SERVICE_HOME=$(dirname "$(dirname "$(readlink -f "$0")")") | 
 | readonly SERVICE_NAME=gc-executor | 
 | readonly CONFIG=${SERVICE_HOME}/gc.config | 
 | readonly PATH_TO_JAR="${SERVICE_HOME}/${SERVICE_NAME}.jar" | 
 | readonly PID_FILE="${SERVICE_HOME}/bin/${SERVICE_NAME}-pid" | 
 |  | 
 | usage() { | 
 |   me=$(basename "$0") | 
 |   echo "Usage: $me {start|stop [--now]|restart [--now]|status|check}" >&2 | 
 |   exit 1 | 
 | } | 
 |  | 
 | is_running() { | 
 |   [[ -f ${PID_FILE} && $(cat "${PID_FILE}") == $(pgrep -f "${SERVICE_NAME}.jar") ]] | 
 | } | 
 |  | 
 | get_config() { | 
 |   if [[ -f "${CONFIG}" ]]; then | 
 |     git config --file "${CONFIG}" "$1" "$2" | 
 |   fi | 
 | } | 
 |  | 
 | start() { | 
 |   echo "Starting ${SERVICE_NAME} ..." | 
 |   if is_running; then | 
 |     echo "${SERVICE_NAME} is already running" | 
 |   else | 
 |     java_home=$(get_config --get jvm.javaHome) | 
 |     if [[ -z "${java_home}" ]]; then | 
 |       java_home="/opt/gerrit/jdk8" | 
 |     fi | 
 |     java_options=($(get_config --get-all jvm.javaOptions)) | 
 |  | 
 |     nohup "${java_home}/bin/java" "${java_options[@]}" -DconfigFile="${CONFIG}" \ | 
 |       -jar "${PATH_TO_JAR}" > "${SERVICE_HOME}"/startup.log 2>&1& | 
 |     echo "${!}" > "${PID_FILE}" | 
 |     echo "${SERVICE_NAME} started" | 
 |   fi | 
 | } | 
 |  | 
 | stop(){ | 
 |   if is_running; then | 
 |     PID=$(cat "${PID_FILE}"); | 
 |     echo -n "${SERVICE_NAME} stopping ..." | 
 |     kill "${kill_options}" "${PID}"; | 
 |     # wait for the process to die | 
 |     while kill -0 "${PID}" >/dev/null 2>&1; do | 
 |       sleep 1 | 
 |       echo -n "." | 
 |     done | 
 |     echo -e "\n${SERVICE_NAME} stopped" | 
 |     rm -f "${PID_FILE}" | 
 |   else | 
 |     echo "${SERVICE_NAME} is not running" | 
 |   fi | 
 | } | 
 |  | 
 | restart(){ | 
 |   stop | 
 |   start | 
 | } | 
 |  | 
 | status(){ | 
 |   if is_running; then | 
 |     echo "${SERVICE_NAME} is up." | 
 |   else | 
 |     echo "Looks like ${SERVICE_NAME} is down!" | 
 |   fi | 
 | } | 
 |  | 
 | check(){ | 
 |   tail -100f /opt/gerrit/review_site/logs/gc/gc.log | 
 | } | 
 |  | 
 | main(){ | 
 |   action=$1 | 
 |   shift | 
 |   kill_options="-TERM" | 
 |  | 
 |   while [[ $# -gt 0 ]]; do | 
 |     case "$1" in | 
 |     --now) | 
 |       kill_options="-KILL" | 
 |       shift | 
 |       ;; | 
 |     *) | 
 |       usage | 
 |     esac | 
 |   done | 
 |  | 
 |   case "${action}" in | 
 |     start) | 
 |       start | 
 |       ;; | 
 |     stop) | 
 |       stop | 
 |       ;; | 
 |     restart) | 
 |       restart | 
 |       ;; | 
 |     status) | 
 |       status | 
 |       ;; | 
 |     check) | 
 |       check | 
 |       ;; | 
 |     *) | 
 |       echo "${action} is not a known command." | 
 |       usage | 
 |   esac | 
 |   exit 0 | 
 | } | 
 |  | 
 | main "$@" |