62 lines
1.8 KiB
Bash
62 lines
1.8 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
STANDARD_HOME_DIR="${STANDARD_HOME_DIR:?STANDARD_HOME_DIR is required}"
|
|
STANDARD_RUN_USER="${STANDARD_RUN_USER:?STANDARD_RUN_USER is required}"
|
|
STANDARD_JAVA_HOME="${STANDARD_JAVA_HOME:-${STANDARD_HOME_DIR}/jdk}"
|
|
STOP_TIMEOUT_SECONDS="${STOP_TIMEOUT_SECONDS:-30}"
|
|
|
|
run_as_standard_user() {
|
|
local app_dir="$1"
|
|
local script_name="$2"
|
|
|
|
sudo -n -u "${STANDARD_RUN_USER}" /bin/bash -lc '
|
|
set -euo pipefail
|
|
app_dir="$1"
|
|
script_name="$2"
|
|
java_home="$3"
|
|
|
|
cd "${app_dir}"
|
|
export JAVA_HOME="${java_home}"
|
|
export PATH="${JAVA_HOME}/bin:/usr/local/bin:/usr/bin:/bin:${PATH:-}"
|
|
|
|
exec /bin/bash "./${script_name}"
|
|
' -- "${app_dir}" "${script_name}" "${STANDARD_JAVA_HOME}"
|
|
}
|
|
|
|
wait_until_stopped() {
|
|
local pattern="$1"
|
|
local label="$2"
|
|
local deadline=$((SECONDS + STOP_TIMEOUT_SECONDS))
|
|
while pgrep -f "${pattern}" >/dev/null 2>&1; do
|
|
if (( SECONDS >= deadline )); then
|
|
echo "[WARN] ${label} still running after ${STOP_TIMEOUT_SECONDS}s, force killing"
|
|
pkill -9 -f "${pattern}" >/dev/null 2>&1 || true
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
}
|
|
|
|
stop_by_pattern() {
|
|
local pattern="$1"
|
|
local label="$2"
|
|
if pgrep -f "${pattern}" >/dev/null 2>&1; then
|
|
echo "[INFO] stopping ${label}: ${pattern}"
|
|
pkill -f "${pattern}" >/dev/null 2>&1 || true
|
|
wait_until_stopped "${pattern}" "${label}"
|
|
fi
|
|
}
|
|
|
|
if [ -x "${STANDARD_HOME_DIR}/cmsp/stop_cmsp.sh" ]; then
|
|
run_as_standard_user "${STANDARD_HOME_DIR}/cmsp" "stop_cmsp.sh" || true
|
|
fi
|
|
stop_by_pattern "${STANDARD_HOME_DIR}/cmsp" "CMEP-CMSP path"
|
|
stop_by_pattern "CMEP-CMSP" "CMEP-CMSP jar"
|
|
|
|
if [ -x "${STANDARD_HOME_DIR}/cmtp/stop_cmtp.sh" ]; then
|
|
run_as_standard_user "${STANDARD_HOME_DIR}/cmtp" "stop_cmtp.sh" || true
|
|
fi
|
|
stop_by_pattern "${STANDARD_HOME_DIR}/cmtp" "CMEP-CMTP path"
|
|
stop_by_pattern "CMEP-CMTP" "CMEP-CMTP jar"
|