Gemini
feat: add detailed logging
01d5a5d
raw
history blame
6.58 kB
#!/bin/bash
# Source the logging utilities
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/utils/logging.sh"
# Load configuration from .env file
load_env() {
if [ -f .env ]; then
# Only load necessary environment variables
export LOCAL_APP_PORT=$(grep '^LOCAL_APP_PORT=' .env | cut -d '=' -f2)
export LOCAL_FRONTEND_PORT=$(grep '^LOCAL_FRONTEND_PORT=' .env | cut -d '=' -f2)
else
# Use default port if .env not found
export LOCAL_APP_PORT=8002
log_info "Using default port: ${LOCAL_APP_PORT}"
fi
}
# Main function to stop services
stop_services() {
log_step "Stopping services..."
# Load environment variables
load_env
# Create run directory if it doesn't exist
mkdir -p run
# Stop backend service
if [ -f run/.backend.pid ]; then
BACKEND_PID=$(cat run/.backend.pid)
if ps -p $BACKEND_PID > /dev/null; then
kill $BACKEND_PID
log_success "Backend service stopped (PID: $BACKEND_PID)"
else
log_info "Backend process not running, checking port ${LOCAL_APP_PORT}..."
PORT_PID=$(lsof -ti:${LOCAL_APP_PORT} 2>/dev/null)
if [ ! -z "$PORT_PID" ]; then
kill -9 $PORT_PID
log_success "Backend service forcefully stopped (Port PID: $PORT_PID)"
else
log_info "No backend service found running on port ${LOCAL_APP_PORT}"
fi
fi
rm -f run/.backend.pid
else
log_info "No backend PID file found, checking port ${LOCAL_APP_PORT}..."
PORT_PID=$(lsof -ti:${LOCAL_APP_PORT} 2>/dev/null)
if [ ! -z "$PORT_PID" ]; then
kill -9 $PORT_PID
log_success "Backend service forcefully stopped (Port PID: $PORT_PID)"
else
log_info "No backend service found running on port ${LOCAL_APP_PORT}"
fi
fi
# Double-check if port 8002 is still in use
PORT_PID=$(lsof -ti:${LOCAL_APP_PORT} 2>/dev/null)
if [ ! -z "$PORT_PID" ]; then
log_warning "Port ${LOCAL_APP_PORT} is still in use, forcefully terminating process..."
kill -9 $PORT_PID
sleep 0.5
# Check again
PORT_PID=$(lsof -ti:${LOCAL_APP_PORT} 2>/dev/null)
if [ ! -z "$PORT_PID" ]; then
log_error "Failed to release port ${LOCAL_APP_PORT}, process (PID: $PORT_PID) is still running"
else
log_success "Successfully released port ${LOCAL_APP_PORT}"
fi
fi
# Stop llama-server process
log_info "Checking for llama-server processes..."
LLAMA_PIDS=$(pgrep -f "llama-server")
if [ ! -z "$LLAMA_PIDS" ]; then
echo "$LLAMA_PIDS" | while read pid; do
log_info "Stopping llama-server process (PID: $pid)..."
kill $pid 2>/dev/null
sleep 0.5
# Check if process is still running
if ps -p $pid > /dev/null 2>&1; then
log_warning "Process still running, using force kill..."
kill -9 $pid 2>/dev/null
fi
done
log_success "llama-server processes stopped"
else
log_info "No llama-server processes found"
fi
# Check if port 8080 is still in use (common port for llama-server)
log_info "Checking if port 8080 is in use..."
PORT_PID=$(lsof -ti:8080 2>/dev/null)
if [ ! -z "$PORT_PID" ]; then
log_info "Stopping process using port 8080 (PID: $PORT_PID)..."
kill -9 $PORT_PID
log_success "Process using port 8080 forcefully terminated"
else
log_info "Port 8080 is not in use"
fi
# Stop frontend service
if [ -f run/.frontend.pid ]; then
FRONTEND_PID=$(cat run/.frontend.pid)
if ps -p $FRONTEND_PID > /dev/null; then
log_info "Stopping frontend process (PID: $FRONTEND_PID)..."
# use pkill to terminate process tree
pkill -P $FRONTEND_PID 2>/dev/null
kill $FRONTEND_PID 2>/dev/null
sleep 1
# check if process is still running
if ps -p $FRONTEND_PID > /dev/null; then
log_warning "Frontend process still running, using force kill..."
kill -9 $FRONTEND_PID 2>/dev/null
fi
log_success "Frontend process stopped (PID: $FRONTEND_PID)"
else
log_info "Frontend process not running"
fi
rm -f run/.frontend.pid
fi
# check and terminate all possible frontend related processes
log_info "Checking for any remaining Next.js processes..."
# find and terminate all Next.js related processes
NEXT_PIDS=$(pgrep -f "next dev|next-server")
if [ ! -z "$NEXT_PIDS" ]; then
echo "$NEXT_PIDS" | while read pid; do
log_info "Stopping Next.js process (PID: $pid)..."
kill $pid 2>/dev/null
sleep 0.5
# check if process is still running
if ps -p $pid > /dev/null 2>&1; then
log_warning "Process still running, using force kill..."
kill -9 $pid 2>/dev/null
fi
done
log_success "Next.js processes stopped"
fi
# find and terminate all frontend related npm processes
NPM_PIDS=$(pgrep -f "npm run dev")
if [ ! -z "$NPM_PIDS" ]; then
echo "$NPM_PIDS" | while read pid; do
log_info "Stopping npm process (PID: $pid)..."
kill $pid 2>/dev/null
sleep 0.5
# check if process is still running
if ps -p $pid > /dev/null 2>&1; then
log_warning "Process still running, using force kill..."
kill -9 $pid 2>/dev/null
fi
done
log_success "npm processes stopped"
fi
# check if frontend port is still in use
if [ ! -z "${LOCAL_FRONTEND_PORT}" ]; then
log_info "Checking if port ${LOCAL_FRONTEND_PORT} is still in use..."
PORT_PID=$(lsof -ti:${LOCAL_FRONTEND_PORT} 2>/dev/null)
if [ ! -z "$PORT_PID" ]; then
log_info "Stopping process using port ${LOCAL_FRONTEND_PORT} (PID: $PORT_PID)..."
kill -9 $PORT_PID
log_success "Process using port ${LOCAL_FRONTEND_PORT} forcefully terminated"
else
log_info "Port ${LOCAL_FRONTEND_PORT} is not in use"
fi
fi
log_success "All services stopped successfully"
}
# Execute stop services
stop_services