一个 cron 作业未运行

一个 cron 作业未运行

我有一个 cron 作业列表。

00 21 * * * sh ~/db_backup.sh

20 21 * * * sh ~/update.sh

* 5 1 * *  sh ~/db_vacuum.sh

第一项工作是对我在 Ubuntu 服务器上运行的数据库进行备份,这有效,因为我使用以下命令验证了备份文件的最后修改日期:

date -r db.sql

我的第三个 cron 作业只是在每个月初清理我的数据库。我的问题出在我的第二个作业中。此作业在我正在运行的 DJango 应用程序上执行了几个 url 回调:

sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command1"
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command2"
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command3"
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command4"

我检查了预期的输出,似乎文件根本没有执行,奇怪的是,如果我使用以下命令手动执行它:

sh ~/update.sh

它运行完美,我是否遗漏了 wgets 的某些功能?如果不太明显,wget 命令指向运行服务器的 docker 容器。

更新:

我尝试将日志文件作为输出文件附加到 .sh 文件中的 wget 命令。在设定的 cron 作业执行时间之后检查,目录中没有日志文件。

然后我检查了实际的系统日志,发现这条消息在我的.sh 文件执行后立即出现在日志中。

(CRON) info (No MTA installed, discarding output)

这可能有什么关联吗?

答案1

sudo您的问题在于脚本中的使用。Cron 可以绝不输入您的 sudo 密码。

答案2

我注意到您使用 sh 来调用 cronjob,但是 sh 是 bash 的一个子集,可能无法执行您的 cronjob。此外,手动运行任务与通过 cron 运行任务并不一定相同。请在 cronjob 中将 sh 更改为 bash,看看会发生什么。

您在日志文件中看到的有关 MTA 的错误消息意味着您没有安装邮件传输代理,也就是说您没有安装发送邮件的软件。Cron 会尝试发送邮件来通知您某事。这可能是有关失败的 cronjob 的错误消息。

相关内容