我无法找到有关如何强制 Dovecot 在更新证书时重新读取证书的任何文档。
目前我正在做
/bin/systemctl restart dovecot
有人知道这是否会导致重启期间中断,或者 dovecot 是否会彻底终止旧会话并允许使用新配置启动新会话?有人能建议强制 dovecot 重新加载其 SSL 证书的最佳做法吗?
答案1
只需重新加载即可。没有理由重新启动并中断所有人的服务。
systemctl reload dovecot
答案2
如果您使用 letsencrypt,则可以添加部署挂钩,以便在 certbot 更新您的证书时自动执行此操作。部署挂钩位于:
/etc/letsencrypt/renewal-hooks/deploy/
创建一个文件(名称无所谓——我将我的命名为reload-dovecot
),内容如下:
#!/bin/sh
do
if [ "$domain" = mail.example.com ]
then
systemctl reload dovecot
fi
done
替换mail.example.com
为您的邮件服务器的实际名称。确保文件设置为可执行文件。
您可能想要创建一个类似的脚本来重新加载 postfix。
有关 dovecot 的答案取自此处:https://www.xhalford.com/using-hook-scripts-with-certbot/#:~:text=Luckily%2C%20Certbot%20comes%20with%20the,renewal%2Dhooks%2Fdeploy%2F%20。
您还可以使用 certbot 本身来创建钩子:
sudo certbot renew --force-renewal --deploy-hook "postfix reload; service dovecot reload"
请参阅此处的话题:https://community.letsencrypt.org/t/certbot-dovecot-postfix-certificate-renewal-issue/72226/11
注意:线程中的示例使用service postfix reload
- 这对我来说在 Ubuntu 20.x 上不起作用。
答案3
脚本代码如下@z0lo 的回答无法正常工作。以下是可以正常工作的更新版本(必须mail.example.com
用您的邮件服务器替换它):
#!/bin/sh
if [ "$RENEWED_DOMAINS" = "mail.example.com" ]
then
systemctl reload dovecot
fi