Let’s Encrypt证书自动更新
Let’s Encrypt免费SSL证书用起来非常方便,但每次申请只有三个月有效期,在每次到期之前都需要重新申请,不过重新申请并不麻烦,只需要一行命令就完事:certbot renew
。
即便是一条命令就OK,也不想每隔三个月就需要登录到机器上执行更新命令,所以我在第一次申请之后就配置了crontab每隔两个月重新申请一次。
愿景是美好的,但过了一段时间后,我网站证书竟然过期了,也就是说crontab没有生效或者任务失败了,此文就是来找到这个问题所在以及修复它。
history
v1
最开始我配置了一条这样的crontab:
0 0 1 */2 * certbot renew --force-renewal
然后发现不生效,鉴于之前的经验知道crontab执行命令的路径应该是$HOME
,而且不会加载环境变量,所以在这里改了一下。
v2
通过which certbot
查找到命令的完整路径,然后配置到crontab中:
0 0 1 */2 * /usr/bin/certbot renew --force-renewal
但过了一段时间后发现网站的证书没有更新,自己依旧没当回事,觉得可能是month: */2这个写法不对。
v3
虽然之前在crontab文档里面是见过*/2
这种写法的,但这次没去深究,遂改成1,3,5…逗号的写法:
0 0 1 1,3,5,7,9,11 * /usr/bin/certbot renew --force-renewal
结果依旧悲催。
v4
悲催后,我又改了下:
0 0 1 1,3,5,7,9,11 * /usr/bin/certbot renew --quiet --force-renewal 1>/dev/null 2>/dev/null
写这篇文章就是发生在第四次瞎B试失败后,受不了了…
now
crontab日志
为了验证,这次就不再是配置两个月间隔的crontab,就看着时间配置,比如现在是13:57,那么crontab里面就配置成:
0 14 * * * /usr/bin/certbot renew --quiet --fo