我使用的是Ubuntu 16.04。
@monthly letsencrypt renew && service apache2 reload
#1 楼
每月不够频繁。此脚本应至少每周运行一次,最好每天运行一次。请记住,除非证书即将过期,否则不会更新证书,并且每月一次可能会导致您现有的证书在更新之前偶尔已经过期。
程序的名称是
certbot
,从letsencrypt
重命名。如果您仍在使用letsencrypt
,则需要更新到当前版本。除了这些问题,它与我的cron作业大致相同。43 6 * * * certbot renew --post-hook "systemctl reload nginx"
注意: 18.04 LTS(最终)
letsencrypt
软件包已重命名为certbot
。现在,它包括一个systemd
计时器,您可以通过certbot
和systemctl enable certbot.timer
来安排systemctl start certbot.timer
的续订。但是,Ubuntu没有提供指定钩子的方法。您需要为certbot.service
设置替代,以使用所需的命令行替代ExecStart=
,直到Canonical修复此问题。评论
什么时候接近“到期时间”?
–安德烈·菲格雷多(Andre Figueiredo)
17年5月11日在18:49
使用--renew-hook而不是--post-hook,最好仅在证书成功更新后才重新启动。
–mwfearnley
17-10-6在9:27
我读过使用--deploy-hook而不是--renew-hook,但是我不确定这是否重要。是否需要重新加载Apache?我认为python-certbot-apache软件包会在需要时为我们执行此操作。
–snapfractalpop
17-10-11在6:17
对于apache / httpd,certbot更新将可以正常工作™
–aairey
17-10-25在11:39
我只是想添加而不是覆盖ExecStart来重新加载nginx,而只是将ececStartPost行添加到certbot.service以在完成后重新加载Web服务器:ExecStartPost = / usr / sbin / service nginx重新加载。为我工作!
– J.D. Mallen
18/12/15在6:16
#2 楼
我没有足够的声誉来发表评论,所以我在这里回答。我最近(2017年10月)在Ubuntu 16.04服务器上安装并运行了certbot,并在/etc/cron.d/certbot
中自动创建了一个更新的cron作业。 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
在创建crontab条目之前检查此文件是否已存在是一个好主意。
评论
运行certbot后,我也看到了这一点。很好,让加密完成了!这是一个很棒的项目。
–比约恩
17年12月11日在7:24
值得注意的是,如果存在/ run / systemd / system,则上述cron作业将不会运行certbot续订-这是因为相反,systemd计时器正在运行certbot-在此处详细了解certbot和systemd计时器。
–汉米·唐纳(Hamish Downer)
18年8月2日在19:55
感谢您提到已经安装了cronjob。在阅读您的帖子之前,我还没有意识到这一点。
– NilsB
'18 / 12/1在6:58
对于任何想知道的人,这使其每12小时运行一次。另一个答案43 6 * * *将使其每天在6:43 AM运行。一天一次就足够了,但是任何一个都可以。
–orrd
19年8月22日在23:38
#3 楼
certbot文档建议每天运行两次脚本:注意:
如果您要设置cron或systemd作业,我们建议每天运行两次(不会执行)在您的证书需要更新或吊销之前可以进行任何操作,但是定期运行该证书将使您的站点有机会保持在线状态,以防万一由于某种原因而让Let's Encrypt发起的撤销发生了。请在一个小时内随机选择一分钟来执行续订任务。
certbot-auto
命令需要root特权才能运行,因此cron脚本中的行应如下所示:在我自己的情况下,certbot-auto
脚本位于git-user的主目录中。确切的命令是52 0,12 * * * root /full/path/to/certbot-auto renew --quiet
请注意,文档中的示例与相对路径相对应,如点所示,这可能会造成混淆:事先在shell中执行renew命令来测试路径,如果证书不是由于更新而到期(将在没有
./path/to/certbot-auto renew --quiet
标志的情况下运行此测试以查看发生的情况),则不会发生任何事情。以这种方式更新证书时的服务器,因为如果正确设置,实时证书的路径不会更改。如果您运行的是apache,则为true-对于nginx,请考虑添加更新挂钩如:
52 0,12 * * * root /home/git/certbot-auto renew --quiet
在docker环境中(编辑2020-09-18)可以让该代理网络在本地和实时环境中处理所有证书。我不隶属于该项目,但是几年来我一直在愉快地使用它,从那以后就再也没有碰过cron(用于此任务)或certbot脚本了。
它具有附加的优势,即自动强制通过端口443的流量(如果启用),因此您无需费心apache或nginx配置-为Web应用程序提供服务的容器仅需提供端口80,代理即可处理其余的。
评论
我喜欢这种方式的解释,不需要详细说明服务重启(如果有人在上面做任何事情,一天有两次被抓住的机会,可能会弄得一团糟),而且提到需要的特权。
–Gusstavv Gil
17年2月21日在2:18
这是不正确的-必须至少使用Nginx重新加载服务器-nginx似乎会缓存初始证书,即使文件更改也不会注册新证书。有关使用--renew-hook仅在成功续约后重新启动的信息,请参阅此帖子:guyrutenberg.com/2017/01/01/…
–有什么可能
17年8月18日在1:43
#4 楼
您无需设置任何内容。最近安装的certbot的Debian / Ubuntu安装都应安装systemd计时器和cron作业(如果systemd未处于活动状态,则cron作业将仅运行certbot
,因此您不会同时运行两者)。systemd计时器
您可以使用命令
systemctl list-timers
(或systemctl list-timers --all
,如果您还想显示不活动的计时器)来检查systemd计时器。像这样的东西: certbot.service在最多延迟12小时(43200秒)的随机延迟后的12点和12点。% sudo systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2018-08-03 06:17:25 UTC 10h left Thu 2018-08-02 06:27:13 UTC 13h ago apt-daily-upgrade.timer apt-daily-upgrade.service
Fri 2018-08-03 11:43:29 UTC 15h left Thu 2018-08-02 16:54:52 UTC 3h 7min ago certbot.timer certbot.service
Fri 2018-08-03 12:44:58 UTC 16h left Thu 2018-08-02 19:14:58 UTC 47min ago apt-daily.timer apt-daily.service
Fri 2018-08-03 19:43:44 UTC 23h left Thu 2018-08-02 19:43:44 UTC 18min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2018-08-06 00:00:00 UTC 3 days left Mon 2018-07-30 00:00:09 UTC 3 days ago fstrim.timer fstrim.service
和
/lib/systemd/system/certbot.timer
将执行续订命令。# cat /lib/systemd/system/certbot.timer
[Unit]
Description=Run certbot twice daily
[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true
[Install]
WantedBy=timers.target
cron作业
正如其他人所述,
/lib/systemd/system/certbot.service
中还安装了cron作业: 这是在做:
certbot.timer
-检查certbot.service
是否是可执行文件,并且/etc/cron.d/certbot
不是目录。仅在此检查成功后才继续进行下一个操作。 test -x /usr/bin/certbot -a \! -d /run/systemd/system
-在0秒至12小时之间随机睡眠(43200 = 12 x 60 x 60)。/usr/bin/certbot
检查您的证书并根据需要续订。 /run/systemd/system
标志是“安静”的-除非出现错误,否则不会产生任何输出。我最初对cron作业感到困惑,因为由于systemd它将无法运行,所以会运行certbot吗?我在此论坛帖子中找到了答案,这就是我基于此答案的原因。
评论
“您不必设置任何内容”,但是我的证书最近过期了,大约3个月前我安装了certbot。 /etc/cron.d/certbot存在,systemctl list-timers显示certbot.timer,但是我的证书没有更新。手动运行certbot可以正常工作,所以我不知道发生了什么。最终添加了一个老式的crontab条目。
– Dan Dascalescu
18-10-16在5:20
这是最新和正确的答案,但需要注意的是,它取决于您正在运行的距离:certbot.eff.org/docs/using.html#id8
–olive_tree
18年11月22日在20:16
“并且cron作业将仅在systemd未激活时运行”。您能帮您找到有关此“优先顺序”的一些文档吗?
–titus
19年5月31日在11:22
@titus的解释是cron作业首先运行测试以检查systemd是否处于活动状态,如果是,则cron作业立即退出而不运行certbot-请参阅有关cron作业的文本。我将更精确地编辑文本。
–汉米·唐纳(Hamish Downer)
19年6月1日在18:42
在2018年或之后建立的最新系统的最有效答案。
–最大
20年5月11日在10:26
#5 楼
对于续订LetsEncrypt证书,我通常使用getssl。这是一个非常方便的外壳包装程序,甚至可以通过SSH连接在其他计算机上安装证书。cron条目如下:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
如已经建议的那样,您应该每天运行一次,或者甚至最好每天运行两次。
#6 楼
其他成员已经提供了更多详细的答案。但是看来我应该在这里提到它。从certbot版本0.21.1开始,
--renew-hook
标志已更改为--deploy-hook
请确保您未使用不推荐使用的标志。
certbot renew --deploy-hook "systemctl restart myservice"
#7 楼
如glaux所述:注意:如果要设置cron或systemd作业,建议每天运行两次
(它不会做任何事情)直到您的证书到期(
)进行更新或吊销为止,但是定期运行它可以使您的网站
有机会保持在线状态,以防万一由于某种原因而让我们进行加密发起的
撤销)。请在小时内随机选择一分钟进行更新任务。
来源:https://certbot.eff.org/all-instructions/#debian-8- jessie-apache
所以我最终使用了它(每天两次,分别在每天的01:00和13:00运行):
6 1,13 * * * certbot renew --post-hook "service apache2 restart"
或什至更好: />
--pre-hook和--post-hook挂钩在每次续订尝试之前和之后运行。如果希望挂接仅在成功续订后才能运行,
在这样的命令中使用--renew-hook。 .org / docs / using.html
评论
“请在小时内随机选择一分钟来执行续订任务。”
–Isius
17年8月17日在15:55
按照上面的说明,最好使用--renew-hook,它仅在实际更新证书时才重新启动服务器。
–有什么可能
17年8月18日在1:48
@Isius谢谢,我将其更改为随机分钟(6)。
–塔德杰
17年8月18日在6:19
@JedatKinports:--post-hook和--renew-hook是否应该重新启动服务apache2而不是重新启动服务apache2?
– Paul Ratazzi
18年4月13日在18:29
命令是service apache2 restart!服务重启apache2不是正确的命令/服务。
–GTodorov
18年6月12日在15:33
#8 楼
这就是我用的:/opt/letsencrypt/letsencrypt-auto renew
输出为:已重新启动,因此无需再次进行。如果我再次运行它:
Upgrading certbot-auto 0.8.1 to 0.9.1...
Replacing certbot-auto...
Creating virtual environment...
...
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem
-------------------------------------------------------------------------------
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/host.simplecoin.cz/fullchain.pem (success)
,那么每天续签证书都没有问题,那么我的事务就是:
我使用脚本来调整日志记录以分离文件,所以这是我的cronautorenew.sh:
Cert not yet due for renewal
#9 楼
根据EFF certbot指南,当您使用通过系统软件包管理器安装的
软件包时,许多Linux发行版都提供了自动续订。
如果不确定系统是否已将其自动化,请检查系统的crontab(通常在
/etc/crontab/
和/etc/cron.*/*
,$ crontab -l
和systemd计时器$ systemctl list-timers
中。
评论
作为以下答案之一,certbot v0.19.0(可能还有更早的版本)已经创建了一个crontab条目@ /etc/cron.d/certbot同样,具有tls-sni验证的certbot apache插件将在检索到新证书后作为验证过程的一部分重新加载apache。
下面有一个答案对于新安装非常重要(截至2019年1月),certbot自动添加系统计时器和cron作业计划,因此您不需要cron设置。