Назад | Перейти на главную страницу

Другое поведение при запуске certbot letsencrypt в качестве задания cron

Я установил letsencrypt на Ubuntu 14.03, следуя этому руководству:

https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-14-04

Я также создал задание cron для обновления сертификата, как описано в руководстве, но затем обнаружил следующую проблему:

Есть идеи, почему у меня такое другое поведение? В чем разница между запуском команды вручную на консоли оболочки и ее запуском с помощью cron?

Обновить: я добавил --no-self-upgrade но это не имело никакого значения. При дальнейшем исследовании я заметил следующее:

По какой-то причине certbot, похоже, думает, что он неправильно установлен при работе во второй форме.

Эта проблема возникает из-за способа certbot был установлен.

Когда не используется пакетный дистрибутив, установка certbot, он не может гарантировать, что все зависимости соблюдены, поэтому, чтобы убедиться, что он может работать правильно, он создает виртуальную среду в вашем $HOME. При работе с sudo, это все еще твое $HOME. Однако при запуске с правами root это превращается в /root где виртуальная среда отсутствует и, следовательно, certbot не может работать, не создав его. Он не столько обновляется, сколько устанавливается с учетом новой среды, в которой он запущен.

РЕДАКТИРОВАТЬ:

Проблема заключалась в том, что certbot-auto сначала запускался (инициализировался) с использованием sudo, в то время как cron запускал его от имени пользователя root. Это результат попытки certbot-auto установить зависимости при выполнении cron / root.

Решением было бы запустить certbot-auto как root, а не использовать sudo.

Я все еще хочу упомянуть --no-self-upgrade, так как это предотвратит попытки certbot-auto обновить себя. Полезно при выполнении заданием cron, поскольку вы можете / должны отслеживать любые обновления, время от времени запуская их вручную.


Я не вижу никакой разницы при тестировании здесь на Debian Jessie с использованием последней версии certbot-auto. Вы можете добавить к команде '--no-self-upgrade'. Таким образом certbot-auto не проверяет наличие новых версий.

У меня это в /etc/cron.d/letsencrypt

# Check if we need to renew any certificates

4 4 * * * /opt/letsencrypt/certbot-auto renew --quiet --no-self-upgrade --post-hook "service nginx restart" >/dev/null 2>&1

Это будет запускаться каждый раз каждый день, а затем перезапустить nginx, если ему нужно было обновить какие-либо сертификаты, но без попытки обновить сам certbot-auto.