SystemdDoctor
certbot.timer сертификатытаймеры

certbot в systemd: почему не обновляются сертификаты

Обновление сертификатов в systemd делает таймер certbot.timer, а не служба. Типичная беда не в том, что что-то падает, а в том, что сбой никто не замечает: сертификат истекает через 90 дней, и проблему обнаруживают по ошибке в браузере.

О службе

Пакет certbot ставит таймер, который дважды в сутки запускает попытку обновления. Сама попытка почти всегда завершается успешно и ничего не делает: срок ещё не подошёл. Поэтому важно смотреть не последний запуск, а результат последнего реального обновления.

Проверка владения доменом требует либо доступного порта 80 (способ http-01), либо правки записей DNS. Если порт 80 занят или перекрыт, обновление не проходит. При работающем веб-сервере используют способ через каталог в корне сайта: он не требует остановки сервера.

После обновления сертификат нужно применить: веб-сервер держит старый в памяти. Для этого в certbot есть перехватчики (--deploy-hook), которые перезагружают службу. Без них сертификат обновлён на диске, а браузеры видят прежний до перезапуска.

Как устроена

Что в автозапускеcertbot.timer, а не служба; проверять надо его состояние
Проверка обновленияcertbot renew --dry-run — полный прогон без выпуска
Срок сертификата90 дней, обновление начинается за 30 дней до истечения
Применение сертификатаперехватчик --deploy-hook с перезагрузкой веб-сервера
Частая поломказанятый или закрытый порт 80 при способе проверки http-01

Частые ошибки

9 записей базы отмечены за этой службой.

Таймеры, сокеты, монтирование

Сообщения журнала

Коды выхода

  • status=1/FAILURE в systemdКод 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.

Ошибки служб

Коды выхода этой службы

Числа в status=N ниже 200 назначает сама программа, 200 и выше — systemd, когда не смог подготовить запуск.

statusЧто означает у этой службыКуда смотреть
1/FAILURE проверка владения доменом не прошла или недоступен сервис выдачи сертификатов. разбор

Диагностика

Включён ли таймер и когда была последняя попытка.

systemctl list-timers certbot.timer --no-pager

Полная проверка обновления без расхода лимитов выдачи.

sudo certbot renew --dry-run

Список сертификатов с датами истечения: главный показатель.

sudo certbot certificates

История попыток за месяц: видно, когда обновление перестало проходить.

journalctl -u certbot --since "30 days ago" --no-pager | grep -iE "error|fail|renew" | tail -20

Параметры unit, которые тут важны

  • OnCalendar=расписание попыток обновления
  • Persistent=догон пропущенной попытки после включения машины
  • RandomizedDelaySec=разброс по времени: без него все серверы стучатся одновременно

Частые вопросы

Сертификат обновился, а сайт отдаёт старый. Почему?

Веб-сервер держит сертификат в памяти. Нужен перехватчик после обновления, который выполняет systemctl reload для вашего сервера.

Источники

  • Документация certbot документация программы
    сверено 15 сентября 2026
  • systemd.timer(5) официальная документация
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04) собственная проверка
    сверено 15 сентября 2026