我从 pip3 安装了 certbot:
# pip3 freeze|grep -i certbot
certbot==1.5.0
certbot-apache==1.5.0
certbot-dns-digitalocean==1.5.0
perl -e 'sleep int(rand(1800))' && certbot -q renew
我可以以 root 身份从命令行运行 certbot,但我将 crontab 配置为每周以 root 身份运行两次,并且通过电子邮件收到此错误消息:
/bin/sh: 1: certbot: not found
如果我whereis certbot
在命令行输入,我会得到以下结果:
certbot: /usr/local/bin/certbot
为什么 certbot 不能从 crontab 成功运行?
我正在使用 Ubuntu 18.04。
答案1
您需要使用填充路径,crontab
而您的可执行文件不属于 cron 的 PATH,默认情况下仅包含/bin
和/usr/bin
。因此,您的 cronjob 应如下所示:
* * * * * perl -e 'sleep int(rand(1800))' && /usr/local/bin/certbot -q renew
你可以自定义 cron 的环境,如最后一点所示这里但是在我看来,最好将你的脚本(和 cronjobs)更改为与默认环境一起工作,这样当你设置一个新系统等时,它们将更具可移植性。
答案2
TL:DR对于 Ubuntu 20.04 用户,请不要忘记 certbot 是使用 snapd 安装的。
这个答案和问题让我走上了正确的道路。在 Ubuntu 20.04 中,certbot 更喜欢 snapd。我按照教程安装了,但完全忘记了 snap。@Uri 帮助whereat certbot
提醒我位置已经改变。要么运行
0 2 * * 1 /snap/bin/certbot 更新
或者在 PATH 环境变量中包含 snap
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/快照/箱
https://certbot.eff.org/lets-encrypt/ubuntufocal-apache
*** 重点强调我的