Start-limit-hit start rate limit exceeded — Снятие лимита рестартов systemd
Архитектура ошибки и симптомы сбоя
Сообщение «Start-limit-hit: Unit entered failed state because start rate limit was exceeded» (сопровождающееся «unit.service: Triggering OnFailure= dependencies») генерируется встроенным предохранителем systemd Rate Limiter. Если служба падает и пытается перезапуститься (через директиву Restart=always или внешний триггер) чаще, чем разрешено политикой (по умолчанию: более 5 раз за 10 секунд), systemd блокирует любые дальнейшие попытки запуска, чтобы предотвратить 100% утилизацию CPU и переполнение диска логами.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| StartLimitIntervalSec | 10s (Default) | Временное окно контроля частоты перезапусков сервиса. |
| StartLimitBurst | 5 (Default) | Максимальное число попыток запуска внутри интервала StartLimitIntervalSec. |
| RestartSec | 100ms (Default) | Пауза между падением процесса и следующей попыткой запуска. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Экстренный сброс счетчика попыток перезапуска
# Сброс счетчика срабатываний лимита (снимает блокировку systemd):
sudo systemctl reset-failed service_name.service
# Повторный запуск службы:
sudo systemctl start service_name.serviceСценарий 2: Оптимизация порогов Rate Limit в конфигурации службы
Настройте адекватные интервалы перезапуска, добавив задержку между попытками:
# Открытие редактора переопределения юнита:
sudo systemctl edit service_name.service
# Добавьте в открывшийся файл:
[Unit]
StartLimitIntervalSec=300
StartLimitBurst=10
[Service]
Restart=always
RestartSec=10s
# Примените изменения:
sudo systemctl daemon-reload
sudo systemctl restart service_name.serviceСценарий 3: Полное отключение защиты Rate Limiter (только для тестовых сред)
# Отключение лимита частоты перезапусков:
[Unit]
StartLimitIntervalSec=0Сценарий 4: Устранение циклического триггера перезапуска (Restart Loops)
Проверьте логи, чтобы устранить саму причину мгновенного падения приложения при старте:
# Просмотр последних 50 строк лога сбойного сервиса:
sudo journalctl -u service_name.service -n 50 --no-pagerITSTM выявит коренные причины падения демонов, настроит безопасные политики экспоненциального отката рестартов и устранит простои сервисов.
Частые вопросы (FAQ)
Где должны объявляться директивы StartLimitIntervalSec: в [Unit] или [Service]?
В современных версиях systemd (версии 230+) директивы StartLimitIntervalSec и StartLimitBurst объявляются в секции [Unit]. В устаревших версиях (systemd <= 229, например CentOS 7) они указывались в секции [Service].
Почему служба падает 5 раз подряд за полсекунды?
Если параметр RestartSec не задан (по умолчанию 100ms), systemd мгновенно перезапускает упавший процесс. Если приложение падает сразу из-за битого конфига, лимит 5 попыток исчерпывается за доли секунды.
Как сбросить счетчики rate-limit сразу для всех сервисов системы?
Выполните общую команду: sudo systemctl reset-failed.
Что такое RestartMode=direct в systemd?
Это специальный режим перезапуска (появившийся в новых версиях systemd), который перезапускает только упавший бинарный файл без повторного прогона зависимостей и предстартовых скриптов ExecStartPre.