Это правильный способ установить cron для обновления сертификата Let's Encrypt в Apache2? Я использую Ubuntu 16.04.
@monthly letsencrypt renew && service apache2 reload
cron
lets-encrypt
user3448600
источник
источник
/etc/cron.d/certbot
Ответы:
Ежемесячно не достаточно часто. Этот скрипт должен запускаться как минимум еженедельно, а желательно ежедневно. Помните, что сертификаты не будут обновлены, если они не близки к истечению срока действия, и ежемесячные действия могут привести к тому, что срок действия ваших существующих сертификатов будет истекать до того, как они будут обновлены.
Название программы
certbot
, которая была переименована изletsencrypt
. Если вы все еще используетеletsencrypt
, вам нужно обновить до текущей версии.Помимо этих вопросов, это примерно так же, как мои рабочие места cron.
Обратите внимание, что в 18.04 LTS пакет letsencrypt был (наконец) переименован в certbot. Теперь он включает системный таймер, который вы можете включить для планирования обновлений certbot, с помощью
systemctl enable certbot.timer
иsystemctl start certbot.timer
. Тем не менее, Ubuntu не предоставил способ указать хуки. Вам нужно будет настроить переопределение дляcertbot.service
переопределенияExecStart=
с помощью желаемой командной строки, пока Ubuntu не исправит это.источник
--renew-hook
вместо того--post-hook
, чтобы только перезапустить , если сертификат успешно продлен.certbot renew
просто будет работать ™ExecStartPost=/usr/sbin/service nginx reload
. Работал на меня!ExecStartPost=
- хорошая идея. Почему я не подумал об этом? Но имейте в виду, чтоservice
команда устарела; это не будет вечно. Переключитесь на соответствующиеsystemctl
команды.У меня недостаточно репутации, чтобы комментировать, поэтому я отвечу здесь. Недавно (октябрь 2017 г.) я установил и запустил certbot на сервере Ubuntu 16.04, и автоматически было создано задание cron на обновление
/etc/cron.d/certbot
.Вот задание cron, которое было создано:
Было бы неплохо проверить, если этот файл уже существует, прежде чем создавать запись в crontab.
источник
certbot renew
если/run/systemd/system
оно присутствует - это потому, что вместо этого системный таймер выполняет certbot - узнайте больше о certbot и системных таймерах здесь .43 6 * * *
заставил бы это бежать каждый день в 6:43. Один раз в день должно быть достаточно, но любой из них работает нормально.Документация certbot рекомендует запускать скрипт два раза в день:
Как Майкл Хэмптон упоминает, что имя изменилось на certbot, но они все еще предоставляют опцию -auto, которая постоянно обновляется. Для
certbot-auto
запуска этой команды нужны привилегии суперпользователя, поэтому строка в вашем скрипте cron должна выглядеть примерно так:В моем случае
certbot-auto
скрипт помещается в домашний каталог пользователя git. Точная команда тогдаОбратите внимание, что пример в документации соответствует относительному пути, обозначенному точкой, которая может сбивать с толку:
./path/to/certbot-auto renew --quiet
Обязательно предварительно запустите команду возобновления в оболочке, чтобы проверить путь, если сертификат не подлежит обновлению, ничего не произойдет (запустите этот тест без
--quiet
флага, чтобы увидеть, что происходит).При таком обновлении сертификата нет необходимости обязательно перезагружать сервер, поскольку путь к действующему сертификату не изменяется при правильной настройке.
Это верно, если вы используете apache - для nginx рассмотрите возможность добавления ловушки обновления, например:
источник
--renew-hook
чтобы перезапустить только после успешного обновления: guyrutenberg.com/2017/01/01/…Вам не нужно ничего настраивать. Любая недавняя установка certbot в Debian / Ubuntu должна устанавливать системный таймер и задание cron (и задание cron будет запускаться только в том
certbot
случае, если systemd не активен, поэтому вы не запустите оба).системный таймер
Вы можете проверить системные таймеры с помощью команды
systemctl list-timers
(илиsystemctl list-timers --all
если вы также хотите показать неактивные таймеры). Что-то вроде этого:Таймер certbot должен быть здесь,
/lib/systemd/system/certbot.timer
и он выполнит команду, указанную в/lib/systemd/system/certbot.service
certbot.timer
запустит службу certbot.service в 12:00 и 12:00 после случайной задержки до 12 часов (43200 секунд).и
certbot.service
выполнит команду возобновления.хрон работа
Как уже упоминалось, есть также задание cron, установленное в
/etc/cron.d/certbot
:Это делает:
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- проверить , если/usr/bin/certbot
это исполняемый файл , и что/run/systemd/system
это не является каталогом. Переходите к следующему биту только в случае успешной проверки.perl -e 'sleep int(rand(43200))'
- спать случайное количество от 0 секунд до 12 часов (43200 = 12 х 60 х 60).certbot -q renew
проверьте свои сертификаты и обновите, если требуется.-q
Флаг «тихий» - не производят никакого вывода , если нет ошибки.Первоначально я был озадачен работой cron, так как она не запускалась из-за systemd, так как же будет запускаться certbot? Я нашел ответ в этом сообщении на форуме, на котором я основал этот ответ.
источник
/etc/cron.d/certbot
существует,systemctl list-timers
показываетcertbot.timer
, но мои сертификаты не были обновлены. Запускcertbot
вручную работал нормально, поэтому я не знаю, что происходит. Закончилось добавлением старой школьнойcrontab
записи.test
чтобы проверить, активен ли systemd, и если это так, задание cron немедленно завершается без выполненияcertbot
- см. текст о задании cron. Я отредактирую текст, чтобы быть более точным.Для продления сертификата LetsEncrypt я обычно использую getssl . Это очень удобная оболочка, которая может даже устанавливать сертификат на другие машины через SSH-соединение.
Запись cron следующая:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
Как уже предлагалось, вы должны запускать его ежедневно или, что еще лучше, два раза в день.
источник
Как уже упоминалось глау:
Источник: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
В итоге я использовал это (работает два раза в день, в 01:00 и в 13:00 каждый день):
или даже лучше:
Я не проверял, но это должно работать также:
Источник: https://certbot.eff.org/docs/using.html
источник
--renew-hook
, когда сервер перезагружается только тогда, когда сертификат действительно обновляется.--post-hook
и--renew-hook
бытьservice apache2 restart
вместоservice restart apache2
?service restart apache2
Не правильная команда / сервис.Это то, что я использую:
дает вывод как:
И это говорит о том, что apache уже перезапущен, так что нет необходимости делать это снова. Если я запустлю это снова:
поэтому обновлять сертификат ежедневно не проблема, тогда мой cron:
Я использую скрипт для настройки логирования в отдельный файл, так что вот мой cronautorenew.sh:
источник
Другие участники уже предоставили намного более подробные ответы. Но, похоже, я должен упомянуть об этом здесь.
Начиная с версии certbot
--renew-hook
флаг 0.21.1 изменен на--deploy-hook
Убедитесь, что вы не используете устаревший флаг.источник
Согласно руководству по сертификату EFF
Если вы не уверены, имеет ли ваша система это уже автоматизированное, проверьте crontab вашей системы (как правило, в
/etc/crontab/
и/etc/cron.*/*
$ crontab -l
и системные таймеры$ systemctl list-timers
.источник