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