mirror of
https://github.com/razzant/ouroboros.git
synced 2026-08-25 19:11:44 +00:00
Запущенный из десктопного лаунчера Ouroboros попадает в transient scope systemd со сгенерированным именем вида run-p497094-i8877010.scope. Имя меняется при каждом старте, поэтому остановку нельзя записать в скрипт: приходится сперва выяснять имя через cgroup процесса. Замена на pkill не годится. Лаунчер порождает server.py и пул воркеров; если убить только родителя, воркеры остаются держать порт 8765, и следующий старт падает с address already in use. Юнит даёт стабильное имя: systemctl --user stop ouroboros. Пакеты deb и rpm ставят его в /usr/lib/systemd/user, поэтому после установки имя доступно сразу. Активации при этом нет: включать десктопного агента за пользователя неправильно, у него уже есть запись рабочего стола. Юнит из домашнего каталога имеет приоритет над пакетным — это и есть поддерживаемый способ переопределить ExecStart для headless-узла. Выбран пользовательский юнит, а не системный: состояние живёт в домашнем каталоге, а десктопной сборке нужна сессия пользователя. Системный работал бы от другого пользователя и молча использовал бы другой каталог данных. KillMode=control-group доводит сигнал до всей группы процессов, что и делает обычную остановку достаточной. TimeoutStopSec оставляет запас на незавершённый вызов инструмента. Ограничение частоты перезапусков прекращает бесконечный цикл вместо того, чтобы хоронить первую реальную ошибку под десятками повторов; оба ключа размещены в секции Unit, где их ожидает systemd начиная с версии 229. Отдельно описана готовность, поскольку сигналов три и совпадают они не всегда. Активность юнита означает лишь запуск процесса. Ответ HTTP и даже заполненный пул воркеров готовности не означают: поданная в этот момент задача отклоняется кодом 503. Авторитетный признак — supervisor_ready в ответе /api/state. Скриптам, которые всё равно подают работу, рекомендован повтор на 503: так поступает собственная обвязка бенчмарков проекта. Добавлен тест состава пакетов: он требует наличия юнита в обеих ветках сборки и запрещает включение или запуск из установочных сценариев. Проверено на живой системе: остановка снимает всю группу процессов и освобождает порт за секунду с небольшим, запуск даёт готовность за десять секунд, задача подаётся без отказа и доходит до completed. Отдельно собран deb с заглушкой вместо полезной нагрузки: юнит попадает в пакет по пути /usr/lib/systemd/user/ouroboros.service с правами 644 и проходит валидацию после извлечения. |
||
|---|---|---|
| .. | ||
| bench_delegated_snapshot.py | ||
| build_appimage.sh | ||
| build_linux_packages.sh | ||
| build_repo_bundle.py | ||
| claudexor_platform_smoke.py | ||
| cleanup_test_pollution.py | ||
| download_node_standalone.ps1 | ||
| download_node_standalone.sh | ||
| download_python_standalone.ps1 | ||
| download_python_standalone.sh | ||
| download_ripgrep_standalone.ps1 | ||
| download_ripgrep_standalone.sh | ||
| fetch_claudexor_runtime.py | ||
| pyi_rth_pythonnet.py | ||
| release_proof.py | ||
| run_external_review.py | ||
| run_plan_review.py | ||
| smoke_linux_packages.sh | ||