Certbot自动更新续期HTTPS证书详解

Certbot自动更新续期HTTPS证书详解

最终简化

先说结论

  1. root用户下执行
  2. 安装有certbot
  3. 在systemd服务(现在服务器一般都在,相确认下的话type systemctl)
    可将命令简化如下:
certbot renew --renew-hook "systemctl reload nginx"

命令执行完之后会通过钩子函数重启nginx

自动更新命令详解

官方给出的命令如下:

root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --renew-hook "systemctl reload nginx"

命令说明:
命令意为: 以root权限执行命令,如果certbot命令存在且可执行,并且/run/systemd/system目录不存在,那么sleep一个随机时间后,更新证书(certbot renew),执行后通过金子调用命令:systemctl reload nginx

  1. root以root权限执行
  2. test -x: 判断文件是否存在且可执行
  3. -a: test命令的参数,逻辑与
  4. \\!: test命令的参数,逻辑非
  5. -d: 目录是否存在
  6. &&: 前面的命令执行成功,才执行后面的命令
  7. perl xxx: 随机休眠
  8. certbot -q: 不输出执行结果日志
  9. certbot -q renew: 执行HTTPS证书更新
  10. --renew-hook: 如果执行成功的话执行钩子指定的命令

-q去掉后有两种结果:

  1. 执行成功(日志没有抓到)

  2. 你执行得太频繁了,服务端不给你更新证书,一般30天才给你更新证书

    日志类似如下:

    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Processing /etc/letsencrypt/renewal/caowd.com.conf
    ​- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Cert not yet due for renewal
    
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    The following certificates are not due for renewal yet:
      /etc/letsencrypt/live/caowd.com/fullchain.pem expires on 2023-11-29 (skipped)
    No renewals were attempted.
    No hooks were run.
    ​- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    

这个命令我奇怪的一点是: \! -d /run/systemd/system

这一句的意思是: 检测 /run/systemd/system 目录是否存在,不存在为真, 此时才执行后面的命令

如果systemd服务不存在才执行,明显不太对

另外一个奇怪的地方是: perl -e 'sleep int(rand(43200))'

shell有直接sleep的命令,等价的命令是: sleep $(($RANDOM % 43200))

为什么不直接用这个, 而且为什么要sleep

你可能感兴趣的:(HTTPS证书,Certbot)