#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" RUN_DIR="$ROOT_DIR/run" PID_FILE="$RUN_DIR/hy-app-monitor.pid" LOG_FILE="$RUN_DIR/hy-app-monitor.log" ENV_FILE="${APP_ENV_FILE:-$ROOT_DIR/.env}" SYSTEMD_SERVICE_NAME="hy-app-monitor.service" if [ -f "$ENV_FILE" ]; then set -a # shellcheck disable=SC1090 . "$ENV_FILE" set +a fi APP_BIND="${APP_BIND:-0.0.0.0}" APP_PORT="${APP_PORT:-2026}" TARGETS_FILE="${TARGETS_FILE:-$ROOT_DIR/config/targets.json}" if [ -x "$ROOT_DIR/.venv/bin/python" ]; then PYTHON_BIN_DEFAULT="$ROOT_DIR/.venv/bin/python" else PYTHON_BIN_DEFAULT="python3" fi PYTHON_BIN="${PYTHON_BIN:-$PYTHON_BIN_DEFAULT}" mkdir -p "$RUN_DIR" read_pid() { if [ -f "$PID_FILE" ]; then cat "$PID_FILE" fi } is_running() { local pid pid="$(read_pid || true)" if [ -z "${pid:-}" ]; then return 1 fi kill -0 "$pid" >/dev/null 2>&1 } has_systemd_unit() { if ! command -v systemctl >/dev/null 2>&1; then return 1 fi systemctl cat "$SYSTEMD_SERVICE_NAME" >/dev/null 2>&1 } stop_legacy_process() { local pid pid="$(read_pid || true)" if [ -n "${pid:-}" ] && kill -0 "$pid" >/dev/null 2>&1; then kill "$pid" >/dev/null 2>&1 || true for _ in $(seq 1 10); do if ! kill -0 "$pid" >/dev/null 2>&1; then break fi sleep 1 done kill -9 "$pid" >/dev/null 2>&1 || true fi rm -f "$PID_FILE" }