#!/bin/bash # scripts/stop-task-docker.sh # Stops and cleans up a task-specific Docker Compose environment and dotnet processes TASK_ID=$1 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" COMPOSE_DIR="$PROJECT_ROOT/src/Managing.Docker" COMPOSE_FILE="$COMPOSE_DIR/docker-compose.task-${TASK_ID}.yml" PID_DIR="$PROJECT_ROOT/.task-pids" API_PID_FILE="$PID_DIR/api-${TASK_ID}.pid" WORKERS_PID_FILE="$PID_DIR/workers-${TASK_ID}.pid" if [ -z "$TASK_ID" ]; then echo "❌ Usage: $0 " exit 1 fi echo "🛑 Stopping environment for task: $TASK_ID" # Stop dotnet processes (API and Workers) if [ -f "$API_PID_FILE" ]; then API_PID=$(cat "$API_PID_FILE") if ps -p "$API_PID" > /dev/null 2>&1; then echo "🛑 Stopping API (PID: $API_PID)..." kill "$API_PID" 2>/dev/null || true sleep 2 # Force kill if still running if ps -p "$API_PID" > /dev/null 2>&1; then kill -9 "$API_PID" 2>/dev/null || true fi echo "✅ API stopped" fi rm -f "$API_PID_FILE" fi if [ -f "$WORKERS_PID_FILE" ]; then WORKERS_PID=$(cat "$WORKERS_PID_FILE") if ps -p "$WORKERS_PID" > /dev/null 2>&1; then echo "🛑 Stopping Workers (PID: $WORKERS_PID)..." kill "$WORKERS_PID" 2>/dev/null || true sleep 2 # Force kill if still running if ps -p "$WORKERS_PID" > /dev/null 2>&1; then kill -9 "$WORKERS_PID" 2>/dev/null || true fi echo "✅ Workers stopped" fi rm -f "$WORKERS_PID_FILE" fi # Clean up log files rm -f "$PID_DIR/api-${TASK_ID}.log" "$PID_DIR/workers-${TASK_ID}.log" 2>/dev/null || true # Stop Docker services (PostgreSQL and Redis) cd "$COMPOSE_DIR" if [ -f "$COMPOSE_FILE" ]; then echo "🛑 Stopping Docker services..." if command -v docker &> /dev/null && docker compose version &> /dev/null; then docker compose -f "$COMPOSE_FILE" down -v else docker-compose -f "$COMPOSE_FILE" down -v fi rm -f "$COMPOSE_FILE" echo "✅ Docker services stopped" else echo "⚠️ Compose file not found: $COMPOSE_FILE" echo "💡 Trying to stop containers manually..." # Try to stop containers by name pattern docker stop postgres-${TASK_ID} redis-${TASK_ID} 2>/dev/null || true docker rm postgres-${TASK_ID} redis-${TASK_ID} 2>/dev/null || true # Remove volumes docker volume rm postgresdata_${TASK_ID} redis_data_${TASK_ID} 2>/dev/null || true echo "✅ Docker cleanup attempted" fi echo "✅ Environment stopped and cleaned up"