Как назначить certbot Let Encrypt для автоматического обновления моего сертификата в cron?

Я видел противоречивые рекомендации. Из документов eff.org:

если вы настраиваете работу cron или systemd, мы рекомендуем запускать ее дважды в день... Пожалуйста, выберите случайную минуту в течение часа для ваших задач продления.

Я также видел рекомендации для еженедельных рабочих мест.

Я не специалист по cron, поэтому я бы предпочел ответ с подробными инструкциями по настройке работы cron.

Ответ 1

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

sudo letsencrypt renew --dry-run --agree-tos

Затем я обновил crontab:

sudo crontab -e

Это строка, которую я добавил:

12 3 * * *   letsencrypt renew >> /var/log/letsencrypt/renew.log

Это обновляет каждый день в 3:12 утра. Я предполагаю, что документы рекомендуют "случайную минуту в течение часа", чтобы распределить нагрузку на обновленные серверы. Таким образом, я полагаю, что все, кроме 0, 15, 30 или 45, является предпочтительным.

Я посмотрел на случайную минуту в настройке cron, как Дженкинс позволяет вам делать. На оригинальной странице EEF этот пример:

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew

Наконец, я протестировал команду cron с помощью sudo bash:

sudo bash -c "letsencrypt renew >> /var/log/letsencrypt/renew.log"

Ответ 2

Я недавно (апрель 2018 года) установил и запустил certbot (версия 0.22.2) на сервере Ubuntu 16.04, а новое задание cron было создано автоматически в /etc/cron.d/certbot.

Здесь задание cron, которое было создано:

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew

Пожалуйста, проверьте это, прежде чем вводить новое задание Cron.

Ответ 3

В Debian Jessie и выше (включая Ubuntu) cron не выполняется для обновления Certbot. Вместо этого используется системный таймер. Смотрите таймер: /lib/systemd/system/certbot.timer

Этот таймер запускает следующую службу: /lib/systemd/system/certbot.service

Который содержит:

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true

Чтобы вывести список всех таймеров, выполните в терминале следующую команду:

systemctl list-timers

Надеюсь, Certbot является частью этого:

Пн 2019-02-04 08:38:45 CET 9 ч., Вс. Sun. 2019-02-03 15:25:41 CET 8 ч. Назад certbot.timer certbot.service

ОБНОВИТЬ:

Из-за павших голосов. Я добавлю, как установить Certbot в дистрибутив на основе Debian (он может варьироваться в зависимости от вашего дистрибутива Linux).

Но, например, в Debian Stretch вы можете установить пакет certbot -порта certbot через:

sudo apt-get install certbot -t stretch-backports

Это автоматически установит файлы, которые я показал выше для вас! И, таким образом, автоматически назначает для вас таймер certbot, который запускает службу, которая снова запускает обновление.

Запуск обновления всегда возможен через:

sudo/usr/bin/certbot renew

Может быть принудительно установлен с помощью флага --force-renewal. Для получения дополнительной информации см. Текст справки о продлении:

/usr/bin/certbot --help renew

Файловая часть пакета certbot (включая, но не ограничиваясь):

dpkg-query -L certbot
...
/lib/systemd/system/certbot.service
/lib/systemd/system/certbot.timer
...

Ответ 4

Обычно, когда вы запускаете certbot для любого веб-сервера на сервере Ubuntu 16.04, он автоматически создает cron

#cat /etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew

Ответ 5

Я добавил следующую строку в /etc/crontab для ежедневного запуска попытки возобновления в случайную минуту между 00:00 и приблизительно 16:40:

1  1    * * *   root    sleep ${RANDOM:0:3}m && /home/admin/certbot-auto renew --quiet --no-self-upgrade --authenticator webroot --installer apache -w /var/www/mywebroot

Работает отлично уже более года.

Сама команда обновления может отличаться для вас - я использовал webroot, как он казался наиболее надежным в то время.