Spaces:
Sleeping
Sleeping
| # 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 | |