Skip to content

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

Горячая перезагрузка позволяет обновить конфигурацию и обработчики без остановки сервера и прерывания обработки запросов. По сигналу SIGUSR1 сервер перечитывает config.json и заново инициализирует компоненты: маршруты, обработчики .so, подключения к базам данных, хранилища, сессии и планировщик задач.

Горячая перезагрузка обновляет конфигурацию и обработчики, но не сам бинарник cpdy — для обновления ядра фреймворка требуется полный перезапуск.

Запуск перезагрузки

Событие перезагрузки привязано к сигналу SIGUSR1. Отправьте его процессу сервера (cpdy) одним из способов:

bash
pkill -USR1 cpdy        # по имени процесса
kill  -USR1 <pid>       # по PID процесса

Перед перезагрузкой сервер сбрасывает буферы логирования на диск, поэтому последние записи не теряются.

Проверка конфигурации

Новый config.json сначала парсится и валидируется. Если файл содержит ошибку или невалидную конфигурацию — перезагрузка отменяется, а сервер продолжает работу со старой конфигурацией. Это позволяет править конфигурацию «вживую» без риска остановить работающий сервер.

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

Режимы перезагрузки

Поведение активных соединений при перезагрузке задаётся свойством reload в секции main (см. Конфигурация → reload). Значение по умолчанию — soft.

json
{
    "main": {
        "reload": "hard",
        ...
    },
    ...
}

soft по умолчанию

Сервер перестаёт принимать новые соединения, но продолжает обслуживать уже активные — они завершаются естественным путём: до конца запроса, по истечении таймаута keep-alive или при закрытии соединения клиентом. Перезагрузка выполняется, как только закрыто последнее активное соединение. Ни один находящийся в обработке запрос не обрывается.

hard

Сервер принудительно закрывает все сетевые соединения (shutdown сокетов) сразу после получения сигнала, обрывая активные запросы. Перезагрузка выполняется максимально быстро. Режим удобен, когда изменения нужно применить срочно, а потеря текущих запросов допустима.

Выпущено под лицензией MIT.