|
|
|
|
@ -24,24 +24,26 @@
@@ -24,24 +24,26 @@
|
|
|
|
|
|
|
|
|
|
# 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") |
|
|
|
|
cd "$(dirname "$0")" || exit |
|
|
|
|
[[ -z "$jarfile" ]] && jarfile=$(pwd)/$(basename "$0") |
|
|
|
|
while [[ -L "$jarfile" ]]; do |
|
|
|
|
[[ "$jarfile" =~ "init.d" ]] && init_script=$(basename "$jarfile") |
|
|
|
|
[[ "$jarfile" =~ init\.d ]] && init_script=$(basename "$jarfile") |
|
|
|
|
jarfile=$(readlink "$jarfile") |
|
|
|
|
cd $(dirname "$jarfile") |
|
|
|
|
cd "$(dirname "$jarfile")" || exit |
|
|
|
|
jarfile=$(pwd)/$(basename "$jarfile") |
|
|
|
|
done |
|
|
|
|
jarfolder=$(dirname "$jarfile") |
|
|
|
|
cd "$WORKING_DIR" |
|
|
|
|
jarfolder="$(dirname "$jarfile")" |
|
|
|
|
cd "$WORKING_DIR" || exit |
|
|
|
|
|
|
|
|
|
# Source any config file |
|
|
|
|
configfile=$(basename "${jarfile%.*}.conf") |
|
|
|
|
[[ -r ${jarfolder}/${configfile} ]] && source ${jarfolder}/${configfile} |
|
|
|
|
configfile="$(basename "${jarfile%.*}.conf")" |
|
|
|
|
# shellcheck source=/dev/null |
|
|
|
|
[[ -r "${jarfolder}/${configfile}" ]] && source "${jarfolder}/${configfile}" |
|
|
|
|
|
|
|
|
|
# Initialize PID/LOG locations if they weren't provided by the config file |
|
|
|
|
[[ -z "$PID_FOLDER" ]] && PID_FOLDER="/var/run" |
|
|
|
|
@ -66,9 +68,9 @@ fi
@@ -66,9 +68,9 @@ fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 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'; } |
|
|
|
|
echoRed() { echo $'\e[0;31m'"$1"$'\e[0m'; } |
|
|
|
|
echoGreen() { echo $'\e[0;32m'"$1"$'\e[0m'; } |
|
|
|
|
echoYellow() { echo $'\e[0;33m'"$1"$'\e[0m'; } |
|
|
|
|
|
|
|
|
|
# Utility functions |
|
|
|
|
checkPermissions() { |
|
|
|
|
@ -77,7 +79,7 @@ checkPermissions() {
@@ -77,7 +79,7 @@ checkPermissions() {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
isRunning() { |
|
|
|
|
ps -p $1 &> /dev/null |
|
|
|
|
ps -p "$1" &> /dev/null |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
await_file() { |
|
|
|
|
@ -108,12 +110,13 @@ pid_file="$PID_FOLDER/${identity}.pid"
@@ -108,12 +110,13 @@ pid_file="$PID_FOLDER/${identity}.pid"
|
|
|
|
|
log_file="$LOG_FOLDER/$LOG_FILENAME" |
|
|
|
|
|
|
|
|
|
# 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 2>&1> /dev/null; then |
|
|
|
|
elif type -p java > /dev/null 2>&1; then |
|
|
|
|
javaexe=$(type -p java) |
|
|
|
|
elif [[ -x "/usr/bin/java" ]]; then |
|
|
|
|
javaexe="/usr/bin/java" |
|
|
|
|
@ -123,15 +126,15 @@ else
@@ -123,15 +126,15 @@ else
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
# Build actual command to execute |
|
|
|
|
command="$javaexe -Dsun.misc.URLClassPath.disableJarChecking=true $JAVA_OPTS -jar $jarfile $RUN_ARGS $@" |
|
|
|
|
command="$javaexe -Dsun.misc.URLClassPath.disableJarChecking=true $JAVA_OPTS -jar $jarfile $RUN_ARGS $*" |
|
|
|
|
|
|
|
|
|
# Action functions |
|
|
|
|
start() { |
|
|
|
|
if [[ -f "$pid_file" ]]; then |
|
|
|
|
pid=$(cat "$pid_file") |
|
|
|
|
isRunning $pid && { echoYellow "Already running [$pid]"; return 0; } |
|
|
|
|
isRunning "$pid" && { echoYellow "Already running [$pid]"; return 0; } |
|
|
|
|
fi |
|
|
|
|
do_start |
|
|
|
|
do_start "$@" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
do_start() { |
|
|
|
|
@ -143,21 +146,21 @@ do_start() {
@@ -143,21 +146,21 @@ do_start() {
|
|
|
|
|
chown "$run_user" "$PID_FOLDER" |
|
|
|
|
chown "$run_user" "$pid_file" |
|
|
|
|
chown "$run_user" "$log_file" |
|
|
|
|
if [ {{useStartStopDaemon:true}} = true ] && which start-stop-daemon >/dev/null; then |
|
|
|
|
if [ "${useStartStopDaemon:-true}" = true ] && which start-stop-daemon >/dev/null; then |
|
|
|
|
start-stop-daemon --start --quiet \ |
|
|
|
|
--chuid $run_user \ |
|
|
|
|
--name $identity \ |
|
|
|
|
--make-pidfile --pidfile $pid_file \ |
|
|
|
|
--chuid "$run_user" \ |
|
|
|
|
--name "$identity" \ |
|
|
|
|
--make-pidfile --pidfile "$pid_file" \ |
|
|
|
|
--background --no-close \ |
|
|
|
|
--startas $javaexe \ |
|
|
|
|
--startas "$javaexe" \ |
|
|
|
|
--chdir "$working_dir" \ |
|
|
|
|
-- \ |
|
|
|
|
-Dsun.misc.URLClassPath.disableJarChecking=true $JAVA_OPTS \ |
|
|
|
|
-jar $jarfile $RUN_ARGS "$@" \ |
|
|
|
|
> $log_file 2>&1 |
|
|
|
|
await_file $pid_file |
|
|
|
|
-Dsun.misc.URLClassPath.disableJarChecking=true "${JAVA_OPTS[@]}" \ |
|
|
|
|
-jar "$jarfile" "${RUN_ARGS[@]}" "$@" \ |
|
|
|
|
> "$log_file" 2>&1 |
|
|
|
|
await_file "$pid_file" |
|
|
|
|
else |
|
|
|
|
su -s /bin/sh -c "$command &> \"$log_file\" & echo \$!" $run_user > "$pid_file" |
|
|
|
|
su -s /bin/sh -c "$command > \"$log_file\" 2>&1 & echo \$!" "$run_user" > "$pid_file" |
|
|
|
|
fi |
|
|
|
|
pid=$(cat "$pid_file") |
|
|
|
|
else |
|
|
|
|
@ -174,14 +177,14 @@ do_start() {
@@ -174,14 +177,14 @@ do_start() {
|
|
|
|
|
stop() { |
|
|
|
|
[[ -f $pid_file ]] || { echoYellow "Not running (pidfile not found)"; return 0; } |
|
|
|
|
pid=$(cat "$pid_file") |
|
|
|
|
isRunning $pid || { echoYellow "Not running (process ${pid}). Removing stale pid file."; rm -f "$pid_file"; return 0; } |
|
|
|
|
do_stop $pid $pid_file |
|
|
|
|
isRunning "$pid" || { echoYellow "Not running (process ${pid}). Removing stale pid file."; rm -f "$pid_file"; return 0; } |
|
|
|
|
do_stop "$pid" "$pid_file" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
do_stop() { |
|
|
|
|
kill $1 &> /dev/null || { echoRed "Unable to kill process $1"; return 1; } |
|
|
|
|
for i in $(seq 1 60); do |
|
|
|
|
isRunning $1 || { echoGreen "Stopped [$1]"; rm -f $2; return 0; } |
|
|
|
|
kill "$1" &> /dev/null || { echoRed "Unable to kill process $1"; return 1; } |
|
|
|
|
for _ in $(seq 1 60); do |
|
|
|
|
isRunning "$1" || { echoGreen "Stopped [$1]"; rm -f "$2"; return 0; } |
|
|
|
|
sleep 1 |
|
|
|
|
done |
|
|
|
|
echoRed "Unable to kill process $1"; |
|
|
|
|
@ -196,25 +199,25 @@ force_reload() {
@@ -196,25 +199,25 @@ force_reload() {
|
|
|
|
|
[[ -f $pid_file ]] || { echoRed "Not running (pidfile not found)"; return 7; } |
|
|
|
|
pid=$(cat "$pid_file") |
|
|
|
|
rm -f "$pid_file" |
|
|
|
|
isRunning $pid || { echoRed "Not running (process ${pid} not found)"; return 7; } |
|
|
|
|
do_stop $pid $pid_file |
|
|
|
|
isRunning "$pid" || { echoRed "Not running (process ${pid} not found)"; return 7; } |
|
|
|
|
do_stop "$pid" "$pid_file" |
|
|
|
|
do_start |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
status() { |
|
|
|
|
[[ -f $pid_file ]] || { echoRed "Not running"; return 3; } |
|
|
|
|
[[ -f "$pid_file" ]] || { echoRed "Not running"; return 3; } |
|
|
|
|
pid=$(cat "$pid_file") |
|
|
|
|
isRunning $pid || { echoRed "Not running (process ${pid} not found)"; return 1; } |
|
|
|
|
isRunning "$pid" || { echoRed "Not running (process ${pid} not found)"; return 1; } |
|
|
|
|
echoGreen "Running [$pid]" |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
run() { |
|
|
|
|
pushd $(dirname "$jarfile") > /dev/null |
|
|
|
|
exec $command |
|
|
|
|
pushd "$(dirname "$jarfile")" > /dev/null |
|
|
|
|
$command |
|
|
|
|
result=$? |
|
|
|
|
popd |
|
|
|
|
return $result |
|
|
|
|
return "$result" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# Call the appropriate action function |
|
|
|
|
|