Django crontab没有执行测试函数

时间:2016-07-26 12:23:36

标签: python django

我有以下内容:

  1.   python manage.py crontab show # this command give following
    
      Currently active jobs in crontab:
      12151a7f59f3f0be816fa30b31e7cc4d -> ('*/1 * * * *', 'media_api_server.cron.cronSendEmail')
    
  2. 我的应用程序处于虚拟环境(env)处于活动状态

  3. 在我的media_api_server / cron.py中,我有以下功能:

    def cronSendEmail():
        print("Hello")
        return true 
    
  4. 在settings.py模块中:

    INSTALLED_APPS = (
        ......
        'django_crontab',
    )
    
    CRONJOBS = [
        ('*/1 * * * *', 'media_api_server.cron.cronSendEmail')
    ]
    
  5. 对我来说,所有定义都已到位,但是当我在虚拟环境中运行python manage.py runserver时,控制台不会打印任何东西。

        System check identified no issues (0 silenced).
        July 26, 2016 - 12:12:52
        Django version 1.8.1, using settings 'mediaserver.settings'
        Starting development server at http://127.0.0.1:8000/
        Quit the server with CONTROL-C.
    

    ' Django的crontab的'模块不起作用我在这里跟踪了它的文档https://pypi.python.org/pypi/django-crontab

4 个答案:

答案 0 :(得分:5)

您的代码确实有效。您可能认为null->createAuthUrl()应该出现在标准输出中?所以它不会那样工作,因为cron没有使用print("Hello")stdour来输出它。要查看实际结果,您应该将路径指向stderr列表中的某个日志文件:只需将CRONJOBS作为最后一个参数,例如:

'>> /path/to/log/file.log'

将错误重定向到stdout也可能会有所帮助。为此,您需要将CRONJOBS = [ ('*/1 * * * *', 'media_api_server.cron.cronSendEmail', '>> /path/to/log/file.log') ] 添加到CRONTAB_COMMAND_SUFFIX = '2>&1'

答案 1 :(得分:0)

尝试用第一行更改crontab,例如:

SHELL=/bin/bash

在crontab上使用以下命令创建新行:

./manage.py crontab add

并使用以下命令更改crontab库创建的行:

  

crontab -e

*/1 * * * * source /home/app/env/bin/activate && /home/app/manage.py crontab run 123HASHOFTASK123

答案 2 :(得分:0)

source有时无法在Shell脚本中工作

使用。(点)代替

* / 1 * * * *。 / home / app / env / bin /激活e.t.c。

答案 3 :(得分:0)

另一种方法,直接在OS中(如果您在Unix系统上运行),因此您不必摆弄python库。如果您的OS用户具有django项目的所有权限/拥有,则可以在命令行以及项目文件夹所在的目录中执行该操作;

user@server:~$ crontab -l
0 6 * * * python PROJECT/manage.py shell -c "<--import statements; function calls;-->"

只是共享,因为最近我也遇到过类似的情况,但这证明是一种干净的解决方法