Как настроить автоматическое продление SSL-сертификатов Certbot на Linux с помощью задания cron?
Автоматическое продление SSL-сертификатов Certbot через cron — стандартная практика для поддержания безопасности сайта без ручного вмешательства. Сертификаты Let’s Encrypt действуют 90 дней, поэтому важно настроить регулярную проверку и обновление заблаговременно.
## Шаг 1: Убедитесь, что Certbot установлен
Проверьте наличие Certbot командой:
certbot —version
Если не установлен, выполните (для Ubuntu/Debian):
sudo apt update && sudo apt install certbot
## Шаг 2: Проверьте команду продления вручную
Перед добавлением в cron убедитесь, что команда работает корректно:
sudo certbot renew —dry-run
Флаг `—dry-run` выполняет тестовое продление без реального изменения сертификатов. Если ошибок нет — можно переходить к настройке cron.
## Шаг 3: Откройте редактор crontab
Откройте crontab для пользователя root:
sudo crontab -e
## Шаг 4: Добавьте задание cron
Добавьте следующую строку для проверки дважды в день (рекомендация Let’s Encrypt):
0 3,15 * * * certbot renew —quiet —post-hook «systemctl reload nginx»
Расшифровка:
— `0 3,15 * * *` — запуск каждый день в 03:00 и 15:00;
— `certbot renew` — команда продления;
— `—quiet` — подавляет вывод при отсутствии ошибок;
— `—post-hook «systemctl reload nginx»` — перезагружает Nginx после успешного обновления сертификата.
Если используете Apache, замените `nginx` на `apache2`.
## Шаг 5: Логирование ошибок
Для записи ошибок в лог добавьте перенаправление:
0 3,15 * * * certbot renew —quiet —post-hook «systemctl reload nginx» >> /var/log/certbot-renew.log 2>&1
## Альтернатива: systemd timer
На современных дистрибутивах Certbot при установке через snap или пакетный менеджер автоматически создаёт systemd-таймер. Проверить его можно командой:
sudo systemctl status certbot.timer
Если таймер активен, дополнительная настройка cron не требуется.
## Важные рекомендации
— Certbot продлевает сертификат только если до истечения осталось менее 30 дней — частые запуски безопасны.
— Убедитесь, что порты 80 и 443 открыты во время продления.
— Регулярно проверяйте лог-файлы на наличие ошибок.
— Используйте `—deploy-hook` вместо `—post-hook`, если хотите выполнять команду только при фактическом обновлении сертификата.
Правильно настроенный cron гарантирует бесперебойную работу HTTPS на вашем сервере без необходимости ручного вмешательства.
