1

感谢您帮助我设置我的 cron 工作,crontab 对我来说确实是一座金矿。

不幸的是,我有一个问题,并且不知道它可能是什么......基本上,当邻居的工作开始时,工作不会开始。我会解释


这是我的 crontabs 工作列表:

*/10 * * * * python /webapps/foo/manage.py fetch_articles

*/10 * * * * python /webapps/bar/manage.py fetch_books

我将它们写在一个文件中并使用 crontab /path/to/file 存储它们。

用 crontab -l 检查,工作就在那里。


奇怪的是,其中一个通常每 10 分钟执行一次……但另一个没有。我尝试手动输入命令,它工作正常,没有问题。


有人有建议吗?

帮助将不胜感激,谢谢大家。


更新:

我一直在系统日志文件中,我发现了这个:

3 月 5 日 02:50:01 localhost CRON[21652]: (root) CMD (python /webapps/foo/manage.py fetch_books)

这是否意味着 crontab 称这项工作很好?


谢谢你们的回复!


修复!非常感谢大家!!

问题是脚本默默地失败了,我相信这是由于 PYTHON_PATH 由于脚本被调用的位置而改变......我完全确定。

4

3 回答 3

6

Cron 总是在与你想象的不同的环境中运行 :-)

我总是将我的 cronjobs 设置为:

*/10 * * * * ( date ; python /webapps/foo/manage.py fetch_articles ) >>/tmp/fetch.out 2>&1

以确保记录了一些我可以查看的内容。

这会将您的问题缩小到:

  • cron,如果临时文件没有出现;或者
  • 你的脚本,如果它确实出现了。

而且,在后一种情况下,希望会有一些可以调试的输出。如果没有,请将输出放在那里。

一种方法是放置:

set -x

在脚本的顶部,这将导致在执行之前输出所有行。我所有的脚本都倾向于开始:

#!/bin/bash
#set -x

所以我可以在调试时取消注释第二行。

于 2010-03-05T02:51:39.360 回答
4

从 crontab 联机帮助页:

BUGS 尽管 cron 要求 crontab 中的每个条目都以换行符结尾,但 crontab 命令和 cron 守护程序都不会检测到此错误。相反,crontab 将显示为正常加载。但是,该命令将永远不会运行。 最好的选择是确保您的 crontab 末尾有一个空行。

(我的重点)。

于 2010-03-05T02:47:05.590 回答
1

我认为 ~unutbu 的答案可能是正确的,如果它是第二个没有运行的工作。

但是要检查的另一件事是是否/webapps/bar/manage.py需要对任何资源的独占访问,例如网络套接字/临时文件等。由于您同时启动 2 个进程,您可能会触发竞争条件。

于 2010-03-05T02:58:08.737 回答