cronjob 失败——如何告诉它始终以 root 身份运行?

cronjob 失败——如何告诉它始终以 root 身份运行?

我在服务器上使用 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,您仍然可以指向用户文件夹,但它将以那里的权限运行。

相关内容