Files
managing-apps/scripts/stop-task-docker.sh
2025-12-31 01:31:54 +07:00

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"