【问题标题】:Django crontab not executing test functionDjango crontab 不执行测试功能
【发布时间】:2020-02-13 18:48:28
【问题描述】:

我有以下内容:

  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')
    ]
    

对我来说,一切都已经定义好了,但是当我在虚拟环境中运行 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

【问题讨论】:

  • django-crontab 是一个通过 django 命令管理用户 crontab 的包,它本身不调度命令。您是否运行了manage.py crontab add 并检查了用户的 crontab(通过crontab -l)?你的系统甚至运行 cron 吗?如果是这样,cron 的日志文件中是否有任何错误?
  • crontab -l 说:*/1 * * * * /var/www/html/projects/mediaserver/env/bin/python2.7 /var/www/html/projects/mediaserver/media /manage.py crontab run 12151a7f59f3f0be816fa30b31e7cc4d # django-cronjobs for mediaserver 和 'sudo service cron start' 说:开始:作业已经在运行:cron
  • 所以 django-crontab 完成了它的工作。检查/var/log/cron(如果您的系统上仍然存在,否则您可能需要询问 journald)。你有没有收到来自 cron 的邮件,通知你出了什么问题?
  • 问题解决了吗?

标签: python django


【解决方案1】:

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

CRONJOBS = [
    ('*/1 * * * *', 'media_api_server.cron.cronSendEmail', '>> /path/to/log/file.log')
]

另外,将错误重定向到标准输出也可能会有所帮助。为此,请注意将 CRONTAB_COMMAND_SUFFIX = '2>&1' 添加到您的 settings.py

【讨论】:

  • 如果要添加输出重定向,请确保所有文件夹都存在,否则 cron 将失败。
【解决方案2】:

尝试使用第一行更改 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

【讨论】:

    【解决方案3】:

    source 有时不能在 shell 脚本中工作

    改用.(点)

    */1 * * * * . /home/app/env/bin/activate e.t.c.
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-21
        • 1970-01-01
        • 2013-08-06
        • 2011-08-27
        • 1970-01-01
        • 2020-11-11
        相关资源
        最近更新 更多