Cron 任务不运行

biv*_*ive 0 ubuntu bash cron

我有这个 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
Run Code Online (Sandbox Code Playgroud)

certbot 更新需要 root。

几天后,日志文件仍然不存在,这意味着该任务没有被执行。这是为什么?

Sea*_*mus 5

您的crontab条目看起来不错,但有一个可能的例外:certbot应该有完整的路径规范。例如:

0 22 * * * /path/to/certbot .....
Run Code Online (Sandbox Code Playgroud)

如果这不能解决问题,我们将需要更多信息。我怀疑问题出在环境上,但我们需要询问cronroot用户创建了什么环境。我们可以这样表述我们的问题:

  • 在您的主目录 ( ~/) 中创建一个 shell 脚本,如下所示(或使用您选择的编辑器):
$ nano ~/envtst.sh
Run Code Online (Sandbox Code Playgroud)
  • 在针对您的系统/用户进行调整后,在编辑器中输入以下内容:
$ nano ~/envtst.sh
Run Code Online (Sandbox Code Playgroud)
  • 保存文件,退出编辑器并将文件权限设置为可执行文件。
#!/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
Run Code Online (Sandbox Code Playgroud)
  • 运行您刚刚创建的脚本,并查看/home/you/envtst.sh.out. 此输出将显示您当前$USER登录的环境:
$ chmod a+rx ~/envtst.sh
Run Code Online (Sandbox Code Playgroud)
  • 打开您crontab的编辑:
$ ./envtst.sh $$ cat /home/you/envtst.sh.out
Run Code Online (Sandbox Code Playgroud)
  • 在您的底部输入以下行crontab
$ crontab -e -u root
Run Code Online (Sandbox Code Playgroud)

输出文件/home/you/envtst.sh.out将包含environment“root cron 用户”的列表。一旦你知道这一点,相应地调整你的crontab条目certbot。如果问题仍然存在,请在此处发布输出。