我在服务器上使用 LetsEncrypt 来更新 HTTPS 证书。如果我手动登录到我的服务器并执行
$ sudo /opt/certbot-auto renew --nginx --quiet --no-self-upgrade
然后我的证书升级了,一切都很顺利。
我想将其作为每日 cronjob 运行,因此我这样做了:
$ sudo crontab -e
并添加了以下几行:
# try to renew "at 00:00 on Every Day of the Week"
0 0 * * 1-7 /opt/certbot-auto renew --nginx --quiet --no-self-upgrade >> /var/log/le-renew.log
...然而,这并没有起作用。我检查了内容le-renew.log
并发现以下内容重复多次:
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/<domain>/fullchain.pem (failure)
/etc/letsencrypt/live/<domain>-0001/fullchain.pem (failure)
/etc/letsencrypt/live/www.<domain>/fullchain.pem (failure)
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/<domain>/fullchain.pem (failure)
/etc/letsencrypt/live/<domain>-0001/fullchain.pem (failure)
/etc/letsencrypt/live/www.<domain>/fullchain.pem (failure)
对我来说,这似乎表明 cron 作业未以 sudo 身份运行——如果我在手动调用命令时不添加 sudo(此帖子中的第一个代码块),则续订将失败。
我在这里做错了什么吗?我如何确保 cron 作业以 root 权限运行?关于如何调试此问题的任何提示?就像我说的那样,当我手动通过 SSH 登录并使用 调用它时,该命令按预期运行sudo
,但当将其添加为每日 cron 作业时,它似乎无法正常工作。
答案1
我在服务器上运行 RKHunter 时遇到了这个问题。以 SU 身份登录,然后执行 Crontab -e,您仍然可以指向用户文件夹,但它将以那里的权限运行。