Crontab 任务未启动... 有什么想法?

1 投票
3 回答
2969 浏览
提问于 2025-04-15 20:02

感谢你们帮我设置定时任务,crontab对我来说真是个宝藏。

不过我遇到一个问题,完全不知道是什么原因……基本上,有一个任务没有启动,而其他的任务都正常。我来解释一下。


这是我的定时任务列表:

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

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

我把它们写在一个文件里,然后用crontab /path/to/file命令保存了。

我用crontab -l检查了一下,任务确实在那儿。


奇怪的是,其中一个任务每10分钟正常执行……但另一个却不执行。我试着手动输入命令,结果没有问题,正常运行。


有没有人有什么建议?

非常感谢大家的帮助!


更新:

我查看了系统日志文件,发现了这个:

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

这是不是说明crontab在正常调用这个任务?


谢谢大家的回复!


问题解决了!非常感谢大家!!

问题出在脚本静默失败,我觉得是因为脚本调用的路径导致PYTHON_PATH发生了变化……我不是很确定。

3 个回答

1

我觉得~unutbu的回答可能是对的,如果是第二个任务没有运行的话。

不过还有一个需要检查的地方,就是/webapps/bar/manage.py是否需要独占某些资源,比如网络连接或临时文件等。因为你同时启动了两个进程,这可能会导致竞争条件的问题。

4

来自crontab手册的内容:

错误提示 虽然cron要求每一条crontab的记录最后都要有一个换行符, 但是无论是crontab命令还是cron服务都不会检测到这个错误。 结果是,crontab看起来会正常加载,但实际上命令根本不会执行。 最好的做法是确保你的crontab最后有一行空白。

(我强调的部分)。

6

Cron的运行环境总是和你想的不一样 :-)

我通常会这样设置我的定时任务:

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

这样可以确保有一些日志记录,方便我查看。

这可以帮助你缩小问题范围到以下两种情况:

  • 如果临时文件没有出现,那就是cron的问题;
  • 如果临时文件出现了,那就是你的脚本的问题。

在后者的情况下,希望能有一些输出可以让你调试。如果没有输出,那就需要在脚本中添加一些输出。

一种方法是在脚本的开头加上:

set -x

这样可以让所有的行在执行之前都输出出来。我的所有脚本通常都是这样开始的:

#!/bin/bash
#set -x

所以在调试的时候,我只需要取消注释第二行。

撰写回答