Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Горячая перезагрузка

PRX поддерживает горячую перезагрузку большинства изменений конфигурации. При редактировании config.toml (или любого фрагмента в config.d/) изменения обнаруживаются и применяются в течение нескольких секунд — без перезапуска.

Как это работает

PRX использует трёхуровневый механизм для обновления конфигурации на лету:

  1. Наблюдатель файловой системы — наблюдатель notify отслеживает каталог конфигурации (как config.toml, так и всё дерево config.d/) на предмет событий записи.

  2. Подавление дребезга — события подавляются с окном в 1 секунду для объединения быстрых последовательных записей (например, от редакторов, которые сначала записывают, а потом переименовывают).

  3. Атомарная замена — при обнаружении изменения PRX:

    • Вычисляет SHA-256 отпечаток новой конфигурации
    • Сравнивает его с последним известным отпечатком (пропускает, если идентичны)
    • Разбирает новый TOML в структуру Config
    • При успехе: атомарно публикует новую конфигурацию через ArcSwap (без блокировок)
    • При неудаче: сохраняет предыдущую конфигурацию и записывает предупреждение в журнал

Тип SharedConfig (Arc<ArcSwap<Config>>) гарантирует, что все компоненты, читающие конфигурацию, получают согласованный снимок без конкуренции. Читатели вызывают .load_full() для получения снимка Arc<Config>, который остаётся валидным, даже если конфигурация заменяется во время использования.

Что перезагружается на лету

Следующие изменения вступают в силу немедленно (в течение ~1 секунды):

КатегорияПримеры
Настройки провайдераdefault_provider, default_model, default_temperature, api_key, api_url
Настройки каналовTelegram allowed_users, Discord mention_only, Slack channel_id и т.д.
Настройки памятиbackend, auto_save, embedding_provider, сроки хранения
Настройки маршрутизатораenabled, веса (alpha/beta/gamma/delta/epsilon), пороги Automix
Настройки безопасностиБэкенд песочницы, ограничения ресурсов, конфигурация аудита
Настройки автономностиПравила области, уровни автономности
Настройки MCPОпределения серверов, таймауты, списки разрешённых инструментов
Настройки веб-поискаenabled, provider, max_results
Настройки браузераenabled, allowed_domains
Настройки Xinenabled, interval_minutes, лимиты задач
Настройки расходовdaily_limit_usd, monthly_limit_usd, ценообразование
Настройки надёжностиmax_retries, fallback_providers
Настройки наблюдаемостиbackend, эндпоинт OTLP
Настройки проксиURL прокси, списки обхода, область

Что требует перезапуска

Небольшое количество настроек привязывается при запуске и не может быть изменено во время работы:

НастройкаПричина
[gateway] hostTCP-слушатель привязывается один раз при запуске
[gateway] portTCP-слушатель привязывается один раз при запуске
Настройки [tunnel]Туннельные подключения устанавливаются при запуске
Токены ботов каналовПодключения ботов (long-poll Telegram, шлюз Discord, сокет Slack) инициализируются один раз

Для этих настроек необходимо перезапустить демон PRX:

bash
# Если запущен как systemd-сервис
sudo systemctl restart openprx

# Если запущен на переднем плане
# Остановите через Ctrl+C, затем запустите снова
prx

CLI-команда перезагрузки

Вы можете вручную запустить перезагрузку конфигурации без редактирования файла:

bash
prx config reload

Это эквивалентно обнаружению изменения наблюдателем. Конфигурационные файлы перечитываются, разбираются и живая конфигурация атомарно заменяется. Это полезно, когда:

  • Вы изменили файл, но наблюдатель пропустил событие (редко)
  • Вы хотите принудительно перезагрузить после обновления переменных окружения
  • Вы автоматизируете изменения конфигурации через скрипты

Обработка ошибок

Если новый файл конфигурации содержит ошибки:

  • Синтаксические ошибки TOML — парсер отклоняет файл. Предыдущая конфигурация сохраняется. В журнал записывается предупреждение с деталями ошибки разбора.
  • Невалидные значения полей — валидация ловит проблемы вроде confidence_threshold > 1.0 или пустого premium_model_id при включённом Automix. Предыдущая конфигурация сохраняется.
  • Отсутствующий файл — если config.toml удалён, наблюдатель записывает ошибку в журнал, но конфигурация в памяти продолжает работать.

Во всех случаях ошибок PRX продолжает работать с последней известной корректной конфигурацией. Данные не теряются, прерывания сервиса не происходит.

Мониторинг перезагрузок

HotReloadManager поддерживает монотонный счётчик reload_version, который увеличивается при каждой успешной перезагрузке. Вы можете проверить текущую версию через эндпоинт статуса шлюза:

bash
curl http://localhost:16830/api/status

Ответ включает текущий счёт перезагрузок, помогая убедиться, что ваши изменения были применены.

Перезагрузка разделённых файлов

При использовании разделённых файлов конфигурации (config.d/*.toml) наблюдатель мониторит весь каталог config.d/ рекурсивно. Изменение в любом фрагменте .toml запускает полное переобъединение и перезагрузку всей конфигурации. Это означает:

  • Редактирование config.d/channels.toml перезагружает всю конфигурацию (не только каналы)
  • Добавление или удаление файла-фрагмента запускает перезагрузку
  • Порядок объединения — алфавитный по имени файла, фрагменты имеют приоритет над config.toml

Released under the Apache-2.0 License.