fix(llm-runner): terminate existing instances using fuser -k and pkill before launching

This commit is contained in:
Noel Bautista 2026-10-21 13:56:55 -07:00
parent 954b6728e8
commit 8af11cc8ef
No known key found for this signature in database

View file

@ -84,14 +84,8 @@ cmd_stop() {
pkill -f "llama-server" 2>/dev/null || true
log_success "All llama-server processes terminated."
else
local pid
pid=$(lsof -ti :"$target" 2>/dev/null || fuser "$target/tcp" 2>/dev/null || true)
if [ -n "$pid" ]; then
kill "$pid" 2>/dev/null || true
log_success "Killed server on port ${target} (PID: ${pid})."
else
log_warn "No active server found on port ${target}."
fi
fuser -k -9 "$target/tcp" 2>/dev/null || true
log_success "Killed server on port ${target}."
fi
}
@ -122,12 +116,10 @@ launch_instance() {
exit 1
fi
# Check if port is already in use
local existing_pid
existing_pid=$(lsof -ti :"$port" 2>/dev/null || fuser "$port/tcp" 2>/dev/null || true)
if [ -n "$existing_pid" ]; then
log_warn "Port ${port} is already in use by PID ${existing_pid}. Terminating existing process..."
kill -9 "$existing_pid" 2>/dev/null || true
# Ensure target port is free
if fuser "$port/tcp" >/dev/null 2>&1; then
log_warn "Port ${port} is in use. Stopping existing process on port ${port}..."
fuser -k -9 "$port/tcp" 2>/dev/null || true
sleep 1
fi
@ -189,6 +181,8 @@ launch_instance() {
# ------------------------------------------------------------------------------
cmd_cluster() {
log_info "Starting Multi-Agent Cluster (SuperQwen 27B + 2x Qwen 4B)..."
pkill -f "llama-server" 2>/dev/null || true
sleep 1
# Trap to gracefully stop all background instances on Ctrl+C
cleanup_cluster() {
@ -245,6 +239,8 @@ cmd_cluster() {
cmd_muse() {
log_info "Starting Muse-Glimmer 30B Solo Server (Max Context: 128K)..."
pkill -f "llama-server" 2>/dev/null || true
sleep 1
local model="${MODEL:-${SCRIPT_DIR}/models/muse-glimmer/Muse-Glimmer-30B-UD-Q4_K_XL.gguf}"
local mmproj="${MMPROJ:-${SCRIPT_DIR}/models/muse-glimmer/mmproj-Muse-Glimmer-30B-Q8_0.gguf}"
if [ "${mmproj}" = "none" ]; then mmproj=""; fi
@ -263,6 +259,8 @@ cmd_muse() {
cmd_superqwen() {
log_info "Starting SuperQwen 3.8 27B Solo Server (Max Context: 256K)..."
pkill -f "llama-server" 2>/dev/null || true
sleep 1
local model="${MODEL:-${SCRIPT_DIR}/models/Qwen3.8/SuperQwen3.8-27b-abliterated-Q4_K_M.gguf}"
if [ ! -f "${model}" ] && [ -f "${SCRIPT_DIR}/models/Qwen3.8/Qwen3.8-27B-UD-Q4_K_XL.gguf" ]; then
model="${SCRIPT_DIR}/models/Qwen3.8/Qwen3.8-27B-UD-Q4_K_XL.gguf"
@ -284,6 +282,8 @@ cmd_superqwen() {
cmd_qwen4b() {
log_info "Starting Qwen 3.5 4B Solo Server..."
pkill -f "llama-server" 2>/dev/null || true
sleep 1
local model="${MODEL:-${SCRIPT_DIR}/models/Qwen3.5/Qwen3.5-4B-Q5_K_M.gguf}"
local mmproj="${MMPROJ:-${SCRIPT_DIR}/models/Qwen3.5/mmproj-BF16.gguf}"
if [ "${mmproj}" = "none" ]; then mmproj=""; fi
@ -302,6 +302,8 @@ cmd_qwen4b() {
cmd_custom() {
log_info "Starting Custom Server Instance..."
pkill -f "llama-server" 2>/dev/null || true
sleep 1
local model="${MODEL:-}"
if [ -z "${model}" ] || [ ! -f "${model}" ]; then
log_error "No valid MODEL specified! Pass MODEL=/path/to/model.gguf"