← Блог

Один скрипт вместо трёх терминалов

Сережа Рис · 18 January 2026

claude codedevops

Открыл проект, запустил фронтенд — ошибки 404 в консоли. Бэкенд не работает: на порту 8000 висит процесс от вчерашней сессии.

Каждый раз.

Проблема

У меня fullstack на FastAPI + React. Запуск выглядит так:

  1. lsof -ti :8000 | xargs kill — освободить порт
  2. Терминал №1: запустить бэкенд
  3. Ждать, пока стартанёт
  4. Терминал №2: фронтенд
  5. Проверить, что оба отвечают

Пять шагов. По-моему, терял минут пять каждое утро.

Агенты спотыкаются ещё сильнее. Вчера Claude Code увидел 404 на /api/students и полез править роутер — хотя бэкенд просто не был запущен. Потратил 15 минут на отладку несуществующего бага.

Решение

Попросил агента:

Сделай ./dev.sh — запускает backend и frontend, проверяет health endpoints, показывает статус. Посмотри лучшие практики через Exa.

Нашёл три паттерна:

Скрипт:

#!/bin/bash
wait_for_health() {
    local url=$1
    local name=$2
    echo -n "  $name"
    for i in $(seq 1 30); do
        curl -sf "$url" > /dev/null 2>&1 && echo " ✓" && return 0
        echo -n "."
        sleep 1
    done
    echo " ✗" && return 1
}

kill_port() {
    lsof -ti :$1 2>/dev/null | xargs kill -9 2>/dev/null || true
}

kill_port 8000
uvicorn app.main:app --reload --port 8000 &

wait_for_health "http://localhost:8000/health" "Backend"
wait_for_health "http://localhost:8000/api/students" "API"

npm run dev &
wait_for_health "http://localhost:5173" "Frontend"

echo "=== Ready ==="
wait

Результат

Запуск — одна команда. Время старта: 30 секунд вместо пяти минут.

=== Mentor Platform ===

Health checks:
  Backend ✓
  API /api/students ✓
  Frontend ✓

=== Ready ===

Сломалось? Сразу видно где — красный крестик напротив упавшего сервиса.

Документация для агента

В CLAUDE.md добавил:

| ✅ Always | Use `./dev.sh` to start dev environment |

Теперь агент не лезет запускать бэкенд и фронтенд по отдельности.

Источники

Подписаться на обновления — @sereja_tech