我有这个 crontab 任务:
$ sudo crontab -l -u root
0 22 * * * certbot renew --cert-name app.my_website123.net --pre-hook "systemctl nginx stop" --post-hook "systemctl nginx start" >> /home/my_user/cron_log1.log 2>&1
certbot 更新需要 root。
几天后,日志文件仍然不存在,这意味着任务没有执行。这是为什么?
答案1
您的crontab
输入看起来不错,但可能有一个例外:certbot
可能应该指定完整的路径。例如:
0 22 * * * /path/to/certbot .....
如果这不能解决问题,我们需要更多信息。我怀疑问题出在环境上,但我们需要询问cron
为用户创建了什么环境root
。我们可以这样提出问题:
- 在您的主目录 (
~/
) 中创建一个 shell 脚本,如下所示(或使用您选择的编辑器):
$ nano ~/envtst.sh
- 根据您的系统/用户进行调整后,在编辑器中输入以下内容:
#!/bin/sh
/bin/echo "env report follows for user "$USER >> /home/you/envtst.sh.out
/usr/bin/env >> /home/you/envtst.sh.out
/bin/echo "env report for user "$USER" concluded" >> /home/you/envtst.sh.out
/bin/echo " " >> /home/you/envtst.sh.out
- 保存文件,退出编辑器并将文件权限设置为可执行。
$ chmod a+rx ~/envtst.sh
- 运行刚刚创建的脚本,并查看 中的输出
/home/you/envtst.sh.out
。此输出将显示您当前的环境,因为$USER
您以以下身份登录:
$ ./envtst.sh $$ cat /home/you/envtst.sh.out
- 打开你的
crontab
进行编辑:
$ crontab -e -u root
- 在底部输入以下行
crontab
:
* * * * * /home/you/envtst.sh >> /home/you/envtst.sh.err 2>&1
输出文件/home/you/envtst.sh.out
将包含“root cron 用户”的列表environment
。了解后,请相应地调整您的crontab
条目certbot
。如果仍有问题,请在此处发布输出。