让 certbot 等待另一个实例

make certbot wait for another instance

我在这里要做的是:我有一个由定时器控制的 systemd 服务,它处理 letsencrypt 证书的续订。这些证书应该如何显示在配置文件中。

[Unit]
Description=Let's Encrypt renewal

[Service]
Type=oneshot
Environment=CONFIG_FILE=/etc/letsencrypt/test.conf
ExecStart=-/usr/bin/certbot renew --quiet --agree-tos --noninteractive --no-random-sleep-on-renew

续订运行一些 post 处理脚本,确保部署和安装证书。

如果配置在证书生成和上次更新之间发生变化,这些脚本将找不到预期名称下的证书。然后脚本会自动触发另一个脚本以确保证书已创建:

if [[ ! -d /etc/letsencrypt/live/${CERT_NAME} ]]
then
  #certificate folder we expect isn't there , request a new cert
  . /etc/letsencrypt/renewal-hooks/request-new-cert.sh
fi

我遇到的问题是在执行 request-new-cert.sh 期间出现错误 Another Instance of Certbot is already running,导致脚本失败。

我做错了吗?有没有更好的方法来尝试实现我想要做的事情?

解决方案一:

您需要终止其他 certbot 进程。 您可以通过重新启动盒子或终止特定进程来做到这一点。 要找到 certbot 进程,请尝试:

ps -ef | grep certb

进程 ID 将是用户之后的第一个数字,例如:

root 5555 5100 …

要终止进程,请尝试:

kill 5555

注意: 将 5555 替换为您实际的 certbot PID#

方案二:

如果不是运行,请检查您的系统中是否有.certbot.lock个文件。

find / -type f -name ".certbot.lock"

如果有,您可以删除它们:

find / -type f -name ".certbot.lock" -exec rm {} \;

然后重试。