feat: add service manager script
**Motivations :** - provide consistent lifecycle commands for the frontend and relay - avoid port ambiguities when launching local services **Modifications :** - replace start-dev.sh with a start/stop/restart/status manager for ihm_client and sdk_relay - enforce ports 3004 and 8091 with pid tracking and logging per service **Page affectées :** - start-dev.sh
This commit is contained in:
parent
76556e1f6e
commit
ff94b1ec21
191
start-dev.sh
191
start-dev.sh
@ -1,7 +1,188 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Démarrer nginx en arrière-plan
|
set -euo pipefail
|
||||||
nginx
|
|
||||||
|
|
||||||
# Démarrer le serveur de développement Vite
|
ROOT_DIR="/home/ank/dev/ihm_client_dev3"
|
||||||
npm run start
|
LOG_DIR="${ROOT_DIR}/logs"
|
||||||
|
|
||||||
|
FRONT_PORT=3004
|
||||||
|
FRONT_PID_FILE="${LOG_DIR}/ihm_client_dev3.front.pid"
|
||||||
|
FRONT_LOG_FILE="${LOG_DIR}/ihm_client_dev3.front.log"
|
||||||
|
|
||||||
|
RELAY_PORT=8091
|
||||||
|
RELAY_DIR="${ROOT_DIR}/sdk_relay"
|
||||||
|
RELAY_BIN="${RELAY_DIR}/target/release/sdk_relay"
|
||||||
|
RELAY_PID_FILE="${LOG_DIR}/sdk_relay.pid"
|
||||||
|
RELAY_LOG_FILE="${LOG_DIR}/sdk_relay.log"
|
||||||
|
|
||||||
|
mkdir -p "${LOG_DIR}"
|
||||||
|
|
||||||
|
is_running() {
|
||||||
|
local pid="$1"
|
||||||
|
if [ -n "${pid}" ] && kill -0 "${pid}" 2>/dev/null; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_pid_file() {
|
||||||
|
local pid_file="$1"
|
||||||
|
if [ -f "${pid_file}" ]; then
|
||||||
|
local pid
|
||||||
|
pid="$(cat "${pid_file}" 2>/dev/null || true)"
|
||||||
|
if is_running "${pid}"; then
|
||||||
|
kill -TERM "${pid}" 2>/dev/null || true
|
||||||
|
sleep 2
|
||||||
|
if is_running "${pid}"; then
|
||||||
|
kill -KILL "${pid}" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
rm -f "${pid_file}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_port() {
|
||||||
|
local port="$1"
|
||||||
|
if command -v lsof >/dev/null 2>&1; then
|
||||||
|
local pids
|
||||||
|
pids="$(lsof -t -i ":${port}" 2>/dev/null || true)"
|
||||||
|
if [ -n "${pids}" ]; then
|
||||||
|
echo "[stop] Killing processes on port ${port}: ${pids}"
|
||||||
|
kill -TERM ${pids} 2>/dev/null || true
|
||||||
|
sleep 2
|
||||||
|
kill -KILL ${pids} 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
start_front() {
|
||||||
|
stop_front >/dev/null 2>&1 || true
|
||||||
|
stop_port "${FRONT_PORT}" || true
|
||||||
|
|
||||||
|
echo "[start] Launching ihm_client on port ${FRONT_PORT}"
|
||||||
|
(
|
||||||
|
cd "${ROOT_DIR}"
|
||||||
|
npm run start -- --host 0.0.0.0 --port "${FRONT_PORT}" > "${FRONT_LOG_FILE}" 2>&1 &
|
||||||
|
echo $! > "${FRONT_PID_FILE}"
|
||||||
|
)
|
||||||
|
echo "[start] ihm_client PID $(cat "${FRONT_PID_FILE}")"
|
||||||
|
}
|
||||||
|
|
||||||
|
start_relay() {
|
||||||
|
stop_relay >/dev/null 2>&1 || true
|
||||||
|
stop_port "${RELAY_PORT}" || true
|
||||||
|
|
||||||
|
if [ ! -x "${RELAY_BIN}" ]; then
|
||||||
|
echo "[build] Compiling sdk_relay (release)..."
|
||||||
|
(
|
||||||
|
cd "${RELAY_DIR}"
|
||||||
|
cargo build --release
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[start] Launching sdk_relay on port ${RELAY_PORT}"
|
||||||
|
(
|
||||||
|
cd "${RELAY_DIR}"
|
||||||
|
RUST_LOG=info "${RELAY_BIN}" > "${RELAY_LOG_FILE}" 2>&1 &
|
||||||
|
echo $! > "${RELAY_PID_FILE}"
|
||||||
|
)
|
||||||
|
echo "[start] sdk_relay PID $(cat "${RELAY_PID_FILE}")"
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_front() {
|
||||||
|
stop_pid_file "${FRONT_PID_FILE}"
|
||||||
|
stop_port "${FRONT_PORT}" || true
|
||||||
|
echo "[stop] ihm_client stopped"
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_relay() {
|
||||||
|
stop_pid_file "${RELAY_PID_FILE}"
|
||||||
|
stop_port "${RELAY_PORT}" || true
|
||||||
|
echo "[stop] sdk_relay stopped"
|
||||||
|
}
|
||||||
|
|
||||||
|
status_service() {
|
||||||
|
local name="$1"
|
||||||
|
local pid_file="$2"
|
||||||
|
local port="$3"
|
||||||
|
|
||||||
|
local state="stopped"
|
||||||
|
if [ -f "${pid_file}" ]; then
|
||||||
|
local pid
|
||||||
|
pid="$(cat "${pid_file}" 2>/dev/null || true)"
|
||||||
|
if is_running "${pid}"; then
|
||||||
|
state="running (pid ${pid})"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
local port_state="free"
|
||||||
|
if command -v lsof >/dev/null 2>&1; then
|
||||||
|
if lsof -t -i ":${port}" >/dev/null 2>&1; then
|
||||||
|
port_state="in use"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${name}: ${state}, port ${port} ${port_state}"
|
||||||
|
}
|
||||||
|
|
||||||
|
command_all() {
|
||||||
|
local action="$1"
|
||||||
|
case "${action}" in
|
||||||
|
start)
|
||||||
|
start_relay
|
||||||
|
start_front
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
stop_front
|
||||||
|
stop_relay
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
command_all stop
|
||||||
|
command_all start
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
status_service "sdk_relay" "${RELAY_PID_FILE}" "${RELAY_PORT}"
|
||||||
|
status_service "ihm_client" "${FRONT_PID_FILE}" "${FRONT_PORT}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown action: ${action}" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$#" -lt 1 ]; then
|
||||||
|
echo "Usage: $0 {start|stop|restart|status} [front|relay|all]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ACTION="$1"
|
||||||
|
TARGET="${2:-all}"
|
||||||
|
|
||||||
|
case "${TARGET}" in
|
||||||
|
front)
|
||||||
|
case "${ACTION}" in
|
||||||
|
start) start_front ;;
|
||||||
|
stop) stop_front ;;
|
||||||
|
restart) stop_front; start_front ;;
|
||||||
|
status) status_service "ihm_client" "${FRONT_PID_FILE}" "${FRONT_PORT}" ;;
|
||||||
|
*) echo "Unknown action: ${ACTION}" >&2; exit 1 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
relay)
|
||||||
|
case "${ACTION}" in
|
||||||
|
start) start_relay ;;
|
||||||
|
stop) stop_relay ;;
|
||||||
|
restart) stop_relay; start_relay ;;
|
||||||
|
status) status_service "sdk_relay" "${RELAY_PID_FILE}" "${RELAY_PORT}" ;;
|
||||||
|
*) echo "Unknown action: ${ACTION}" >&2; exit 1 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
all)
|
||||||
|
command_all "${ACTION}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown target: ${TARGET}" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Loading…
x
Reference in New Issue
Block a user