Files
dotfiles/.scratch/headless-xray-proxy/issues/03-safe-process-lifecycle.md
T
ddadmin e69a4bb7df feat(xray-proxy): добавлен управляемый прокси для CLI
Зачем:
- отделить переносимый прокси-интерфейс от общих Bash-функций
- запускать агентские CLI через явный внешний или управляемый прокси

Что:
- добавлен stow-пакет xray-proxy с CLI, Bash-модулем и примерами
- реализованы строгий разбор VLESS и управляемый запуск Xray
- добавлены проверки процесса, порта, сигналов и отсутствия утечек
- сохранены спецификация и очередь следующих тикетов

Проверка:
- python3 tests/test_xray_proxy.py — 22/22
- python3 tests/test_xray_proxy_managed.py — 16/16
- bash tests/test_proxy_launchers.sh — 9/9
- bash tests/test_install.sh
- bash -n, Python 3.8 grammar, git diff --check
2026-07-20 00:00:59 +03:00

3.1 KiB

03 — Безопасный жизненный цикл управляемого процесса

What to build: Управляемый Xray предсказуемо переживает повторные команды, сигналы, устаревшее состояние и аварийное исчезновение супервизора, не затрагивая чужие процессы и не оставляя секретные или временные данные.

Blocked by: 02 — Управляемый Xray: полный штатный путь.

Status: ready-for-agent

  • Супервизор владеет пользовательской блокировкой, допускает только один управляемый экземпляр и не заменяет запущенный профиль другим без явных stop и нового start.
  • Состояние с правами 0600 хранит PID и время старта супервизора и Xray, путь к бинарнику, порт и безопасный отпечаток профиля, но не ссылку или её секреты; служебные каталоги имеют права 0700.
  • status и stop сверяют PID со временем старта и ожидаемым исполняемым файлом, поэтому чужой, устаревший и повторно использованный PID никогда не считается управляемым процессом.
  • SIGINT, SIGTERM и SIGHUP передаются дочернему Xray; штатное завершение удаляет состояние, сгенерированный JSON и временные файлы.
  • Если супервизор аварийно исчез, stop завершает оставшийся Xray только после полной проверки его личности и затем безопасно очищает состояние.
  • Повторный запуск, смена профиля, конфликт локального порта и несогласованный машинный адрес завершаются понятным отказом без повреждения уже работающего экземпляра.
  • Полная VLESS-ссылка и её секреты отсутствуют в stdout, stderr, служебных файлах и аргументах дочерних процессов; временная конфигурация существует только внутри закрытого служебного каталога.
  • Автоматические тесты покрывают блокировку, повторный запуск, сигналы, остановку, очистку, смену профиля, конфликт порта, чужой, устаревший и повторно использованный PID, а также исчезнувший супервизор.