Горячая перезагрузка
PRX поддерживает горячую перезагрузку большинства изменений конфигурации. При редактировании config.toml (или любого фрагмента в config.d/) изменения обнаруживаются и применяются в течение нескольких секунд — без перезапуска.
Как это работает
PRX использует трёхуровневый механизм для обновления конфигурации на лету:
Наблюдатель файловой системы — наблюдатель
notifyотслеживает каталог конфигурации (какconfig.toml, так и всё деревоconfig.d/) на предмет событий записи.Подавление дребезга — события подавляются с окном в 1 секунду для объединения быстрых последовательных записей (например, от редакторов, которые сначала записывают, а потом переименовывают).
Атомарная замена — при обнаружении изменения 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 |
| Настройки Xin | enabled, interval_minutes, лимиты задач |
| Настройки расходов | daily_limit_usd, monthly_limit_usd, ценообразование |
| Настройки надёжности | max_retries, fallback_providers |
| Настройки наблюдаемости | backend, эндпоинт OTLP |
| Настройки прокси | URL прокси, списки обхода, область |
Что требует перезапуска
Небольшое количество настроек привязывается при запуске и не может быть изменено во время работы:
| Настройка | Причина |
|---|---|
[gateway] host | TCP-слушатель привязывается один раз при запуске |
[gateway] port | TCP-слушатель привязывается один раз при запуске |
Настройки [tunnel] | Туннельные подключения устанавливаются при запуске |
| Токены ботов каналов | Подключения ботов (long-poll Telegram, шлюз Discord, сокет Slack) инициализируются один раз |
Для этих настроек необходимо перезапустить демон PRX:
# Если запущен как systemd-сервис
sudo systemctl restart openprx
# Если запущен на переднем плане
# Остановите через Ctrl+C, затем запустите снова
prxCLI-команда перезагрузки
Вы можете вручную запустить перезагрузку конфигурации без редактирования файла:
prx config reloadЭто эквивалентно обнаружению изменения наблюдателем. Конфигурационные файлы перечитываются, разбираются и живая конфигурация атомарно заменяется. Это полезно, когда:
- Вы изменили файл, но наблюдатель пропустил событие (редко)
- Вы хотите принудительно перезагрузить после обновления переменных окружения
- Вы автоматизируете изменения конфигурации через скрипты
Обработка ошибок
Если новый файл конфигурации содержит ошибки:
- Синтаксические ошибки TOML — парсер отклоняет файл. Предыдущая конфигурация сохраняется. В журнал записывается предупреждение с деталями ошибки разбора.
- Невалидные значения полей — валидация ловит проблемы вроде
confidence_threshold > 1.0или пустогоpremium_model_idпри включённом Automix. Предыдущая конфигурация сохраняется. - Отсутствующий файл — если
config.tomlудалён, наблюдатель записывает ошибку в журнал, но конфигурация в памяти продолжает работать.
Во всех случаях ошибок PRX продолжает работать с последней известной корректной конфигурацией. Данные не теряются, прерывания сервиса не происходит.
Мониторинг перезагрузок
HotReloadManager поддерживает монотонный счётчик reload_version, который увеличивается при каждой успешной перезагрузке. Вы можете проверить текущую версию через эндпоинт статуса шлюза:
curl http://localhost:16830/api/statusОтвет включает текущий счёт перезагрузок, помогая убедиться, что ваши изменения были применены.
Перезагрузка разделённых файлов
При использовании разделённых файлов конфигурации (config.d/*.toml) наблюдатель мониторит весь каталог config.d/ рекурсивно. Изменение в любом фрагменте .toml запускает полное переобъединение и перезагрузку всей конфигурации. Это означает:
- Редактирование
config.d/channels.tomlперезагружает всю конфигурацию (не только каналы) - Добавление или удаление файла-фрагмента запускает перезагрузку
- Порядок объединения — алфавитный по имени файла, фрагменты имеют приоритет над
config.toml