Как назначить 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, как он казался наиболее надежным в то время.