|  | #!/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 "$@" |