89 lines
1.9 KiB
Bash
Executable File
89 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
RUN_DIR="$ROOT_DIR/run"
|
|
API_PID_FILE="$RUN_DIR/api.pid"
|
|
WORKER_PID_FILE="$RUN_DIR/worker.pid"
|
|
HTTP_PORT=16811
|
|
WORKER_HTTP_PORT=16812
|
|
|
|
load_env_config() {
|
|
local env_file
|
|
|
|
for env_file in ".env"; do
|
|
if [[ -f "$ROOT_DIR/$env_file" ]]; then
|
|
# shellcheck disable=SC1090
|
|
source "$ROOT_DIR/$env_file"
|
|
fi
|
|
done
|
|
|
|
if [[ -n "${APP_ENV:-}" && -f "$ROOT_DIR/.env.$APP_ENV" ]]; then
|
|
# shellcheck disable=SC1090
|
|
source "$ROOT_DIR/.env.$APP_ENV"
|
|
elif [[ -n "${GO_ENV:-}" && -f "$ROOT_DIR/.env.$GO_ENV" ]]; then
|
|
# shellcheck disable=SC1090
|
|
source "$ROOT_DIR/.env.$GO_ENV"
|
|
elif [[ -n "${ENV:-}" && -f "$ROOT_DIR/.env.$ENV" ]]; then
|
|
# shellcheck disable=SC1090
|
|
source "$ROOT_DIR/.env.$ENV"
|
|
fi
|
|
|
|
if [[ -f "$ROOT_DIR/.env.local" ]]; then
|
|
# shellcheck disable=SC1090
|
|
source "$ROOT_DIR/.env.local"
|
|
fi
|
|
}
|
|
|
|
port_pid() {
|
|
local port="$1"
|
|
lsof -tiTCP:"$port" -sTCP:LISTEN 2>/dev/null | head -n 1 || true
|
|
}
|
|
|
|
stop_port_process() {
|
|
local name="$1"
|
|
local port="$2"
|
|
local pid
|
|
|
|
pid="$(port_pid "$port")"
|
|
if [[ -z "$pid" ]]; then
|
|
return 0
|
|
fi
|
|
|
|
kill "$pid" 2>/dev/null || true
|
|
echo "$name stopped by port, pid=$pid"
|
|
}
|
|
|
|
stop_process() {
|
|
local name="$1"
|
|
local pid_file="$2"
|
|
|
|
if [[ ! -f "$pid_file" ]]; then
|
|
echo "$name is not running"
|
|
return 0
|
|
fi
|
|
|
|
local pid
|
|
pid="$(cat "$pid_file")"
|
|
if [[ -z "$pid" ]]; then
|
|
rm -f "$pid_file"
|
|
echo "$name pid file is empty, cleaned"
|
|
return 0
|
|
fi
|
|
|
|
if kill -0 "$pid" 2>/dev/null; then
|
|
kill "$pid"
|
|
echo "$name stopped, pid=$pid"
|
|
else
|
|
echo "$name is not running, stale pid=$pid"
|
|
fi
|
|
|
|
rm -f "$pid_file"
|
|
}
|
|
|
|
stop_process "worker" "$WORKER_PID_FILE"
|
|
stop_process "api" "$API_PID_FILE"
|
|
load_env_config
|
|
stop_port_process "worker" "${WORKER_HTTP_PORT}"
|
|
stop_port_process "api" "${HTTP_PORT}"
|