83 lines
2.6 KiB
Bash
Executable File
83 lines
2.6 KiB
Bash
Executable File
#!/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 <TASK_ID>"
|
|
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"
|