Certbot 续订后/部署后 cron 作业中的挂钩

Certbot 续订后/部署后 cron 作业中的挂钩

在邮件服务器上,我需要在 Certbot 更新我的 Let's Encrypt 证书后重新加载 Dovecot。根据Certbot 文档可以--deploy-hook使用:

对于每个颁发的证书,在 shell 中运行一次命令。

我找到了在 上自动创建的 cron 作业/etc/cron.d/certbot,并在 certbot 和这个问题我认为我会使用:

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --deploy-hook "service dovecot reload"

问题是,Docecot 似乎没有重新启动。证书更新仍然成功。我的问题:如何确保证书更新后重新加载 Dovecot?

补充信息:服务器运行于Ubuntu 18.04.3 LTSCertbot 0.31.0

答案1

由于缺乏全面的答案,我想添加我在偶然发现这个帖子后采用的解决方案。

根据阅读文档

当 Certbot 检测到证书需要续订时,--pre-hook 和 --post-hook 钩子会在每次尝试续订之前和之后运行。如果您希望钩子仅在成功续订后运行,请在命令中使用 --deploy-hook,如下所示。

certbot renew --deploy-hook /path/to/deploy-hook-script

由此得出,“--deploy-hook”参数需要脚本路径。我没有测试引用的命令是否也能正常工作,但我的第一个猜测是这就是你的尝试失败的原因。

您还可以通过将文件放在 Certbot 配置目录的子目录中来指定钩子。假设您的配置目录是 /etc/letsencrypt,当使用 renew 子命令续订任何证书时,在 /etc/letsencrypt/renewal-hooks/pre、/etc/letsencrypt/renewal-hooks/deploy 和 /etc/letsencrypt/renewal-hooks/post 中找到的任何可执行文件将分别作为 pre、deploy 和 post 钩子运行。

我是这样做的。我只是在 /etc/letsencrypt/renewal-hooks/deploy 中创建了一个 shell 脚本,将其命名为 00-do-stuff.sh,并使其可执行(sudo chmod +x path/to/file

如果这对您有用,请让我和大家知道:)

答案2

--post-hook 可以代替 --deploy-hook 吗?如果可以,deploy-hook 也可以工作,但仅限于实际更新的情况。也许也可以尝试这种语法:--deploy-hook="restart app..."

相关内容