certbot 无法从 crontab 运行

certbot 无法从 crontab 运行

我从 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
*** 重点强调我的 在此处输入图片描述

相关内容