SystemdDoctor
служба не работает сертификаты таймеры

Сертификат продлён, а службы его не подхватили

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

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Действие после продления не выполнилось

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

  2. Служба держит прежний сертификат в памяти

    Даже при обновлённых файлах работающий процесс отдаёт сертификат, прочитанный при запуске.

  3. Продление не выполняется вовсе

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

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Сроки действия всех сертификатов на машине.

sudo certbot certificates 2>/dev/null

Какой сертификат служба отдаёт прямо сейчас.

openssl s_client -connect localhost:443 </dev/null 2>/dev/null | openssl x509 -noout -dates

Работает ли таймер продления.

systemctl list-timers "certbot*" --all --no-pager

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Действие после продления не выполнилось
Почему происходит
Ошибка в команде или неверное имя службы означают, что перезагрузка настроек не произошла.
Как проверить
Посмотрите результат продления и действия.
sudo journalctl -u "certbot*" -n 30 --no-pager | grep -iE "hook|deploy|reload"
sudo ls -l /etc/letsencrypt/renewal-hooks/deploy/ 2>/dev/null
Как исправить
Исправьте действие после продления и проверьте его прогоном. Проверять надо именно прогоном, а не чтением: ошибки в таких действиях незаметны до следующего продления.
2. Служба держит прежний сертификат в памяти
Почему происходит
Даже при обновлённых файлах работающий процесс отдаёт сертификат, прочитанный при запуске.
Как проверить
Сравните сертификат на диске и отдаваемый службой.
sudo openssl x509 -in /etc/letsencrypt/live/example.org/cert.pem -noout -dates
openssl s_client -connect localhost:443 </dev/null 2>/dev/null | openssl x509 -noout -dates
Как исправить
Перезагрузите настройки службы. Для веб-серверов это делается без разрыва соединений и должно быть частью действия после продления.
3. Продление не выполняется вовсе
Почему происходит
Таймер продления может быть выключен или задача падать. Тогда сертификат просто истекает.
Как проверить
Посмотрите таймер и последние попытки.
systemctl list-timers "certbot*" "snap.certbot*" --all --no-pager 2>/dev/null
sudo certbot certificates 2>/dev/null | grep -iE "expiry|VALID"
Как исправить
Включите таймер продления и настройте оповещение об отказе задачи. Истёкший сертификат ломает доступ ко всем службам на этом имени.

Пример вывода

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

certbot[11000]: Congratulations, all renewals succeeded
certbot[11000]: Hook 'deploy-hook' reported error code 5
certbot[11000]: Hook 'deploy-hook' ran with error output: Failed to reload nginx.service: Unit nginx.service not found.

Связанные ошибки

Где встречается чаще всего

Источники

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