Gre*_*dot 7 command-line bash cron wget
我有一份 cron 工作清单。
00 21 * * * sh ~/db_backup.sh
20 21 * * * sh ~/update.sh
* 5 1 * * sh ~/db_vacuum.sh
Run Code Online (Sandbox Code Playgroud)
第一项工作备份我在 Ubuntu 服务器上运行的数据库,这在我验证备份文件的最后修改日期时起作用:
date -r db.sql
Run Code Online (Sandbox Code Playgroud)
我的第三个 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"
Run Code Online (Sandbox Code Playgroud)
我检查了预期的输出,似乎文件根本没有执行,奇怪的是,如果我使用以下命令手动执行它:
sh ~/update.sh
Run Code Online (Sandbox Code Playgroud)
它运行完美,是否有一些我遗漏的 wgets 问题?如果不明显,wget 命令指向运行服务器的 docker 容器。
更新:
我尝试将日志文件作为输出文件附加到 .sh 文件中的 wget 命令。在建立的 cron 作业执行时间后回来检查,目录中没有日志文件。
然后我检查了实际的系统日志,我注意到在我的 .sh 文件被执行后,这条消息出现在日志中。
(CRON) info (No MTA installed, discarding output)
Run Code Online (Sandbox Code Playgroud)
这可能以某种方式相关吗?
我注意到您使用 sh 来调用 cronjob,但是 sh 是 bash 的子集,可能无法执行您的 cronjob。此外,手动运行任务不一定与通过 cron 运行任务相同。请在 cronjob 中将 sh 更改为 bash,看看会发生什么。
您在日志文件中看到的有关 MTA 的错误消息意味着您没有安装邮件传输代理,这意味着您没有安装用于发送邮件消息的软件。Cron 尝试发送邮件消息来通知您某件事。这可能是有关失败的 cronjob 的错误消息。