【问题标题】:How to debud django crontab?如何调试 django crontab?
【发布时间】:2019-06-25 01:30:38
【问题描述】:

我已经使用 django crontab 设置了一个 cron 作业。根据文档中的定义,我在 cron.py 中定义了一个测试作业,并将其定义为在 settings.py 中以 1 分钟的间隔运行。

#cron.py
def test_cron_run():
    print("\n\nHello World....!! ",timezone.now())

#settings.py
INSTALLED_APPS = [
    'material.theme.cyan',
    'material',
    'material.admin',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
    'django_crontab',
]

CRONJOBS = [
    ('*/1 * * * *', 'myapp.cron.test_cron_run','>>'+os.path.join(BASE_DIR,'log/debug7.log')),
]

我已经通过运行python3 manage.py crontab add 添加了 cron 作业。 还添加了作业,因为我可以看到我是否运行,python3 manage.py crontab show 但是我看不到任何正在生成的日志文件。 有什么办法可以调试这个,操作系统日志什么的?

【问题讨论】:

  • >> 后面是否有空格?
  • 如果改用('*/1 * * * *', 'myapp.cron.test_cron_run', '>> test.log'),会怎样?
  • 是的,如果我通过传递作业的哈希值并在控制台上打印的运行命令强制运行它,它就会运行,但是无论如何都没有生成日志文件,有没有办法可以将调试器挂接到我的调试我的 django 代码的代码?

标签: python django cron django-cron


【解决方案1】:

也许只是尝试在您的 cron 作业结束时添加 2>&1,它会将错误输出重定向到标准输出。

【讨论】:

    【解决方案2】:

    结合这里给出的提示,这对我来说是这样的:

    import os
    
    CRONJOBS = [
        ('* * * * *', 'myapp.cron.test_cron_run', '>> ' + os.path.join(BASE_DIR,'log/debug7.log' + ' 2>&1 '))
    ]
    

    补充说明

    • 该目录需要存在并且您需要写权限
    • 每次更改 CRONJOBS 后,运行 python3 manage.py crontab add 两次
    • 如果没有 2>&1,来自 python 的错误消息在写入 STDERR 时不会被记录
    • 使用crontab -l 检查实际写入 crontab 的内容
    • 如果它不起作用,您可能收到来自 cron 的邮件。根据您的系统,使用mail 阅读。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。我只能通过包含日志文件的直接路径并提前创建它来让它工作

      【讨论】:

        猜你喜欢
        • 2011-06-20
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-08
        • 2015-11-08
        • 1970-01-01
        相关资源
        最近更新 更多