【问题标题】:How can I run a Python File in a Django Environment using Crontab?如何使用 Crontab 在 Django 环境中运行 Python 文件?
【发布时间】:2014-12-17 05:03:41
【问题描述】:

我正在尝试制作一个每天凌晨 4 点运行 Python 脚本一次的 Crontab 作业。

这是我的 crontab 行

0 4 * * * cron_scripts/scripttorun.py

文件已正确链接,并且正在尝试执行它。但是,当它尝试执行该文件时,它会根据我的导入给我一些错误。 这是我的python文件中导致崩溃的部分,它在第一行崩溃,因为由于某种原因它没有正确导入文件......

from history.models import Model1
from users.models import User

我正在尝试使用来自我的 Web 服务器的其他代码运行 Python 文件,这些代码使用 Django。 为了能够导入我的模型,我是否需要做一些额外的事情?

我在运行 python scripttorun.py 时得到相同的结果。

【问题讨论】:

  • 您遇到的具体错误是什么?

标签: python django django-models crontab


【解决方案1】:

在 Django 中,您可以编写自定义 django-admin 命令。只需检查一下:https://docs.djangoproject.com/en/dev/howto/custom-management-commands/

然后你在 crontab 文件中包含:0 4 * * * python /path/to/myapp/manage.py scriptorun.py

【讨论】:

  • 绝对是这个。只需创建一个管理命令并运行它而不是您自己的脚本。从一个花了很多时间把头撞在这堵墙上的人那里得到它——这很有效,而且很快。
【解决方案2】:

我个人的建议是在 app/management/commands/yourcommand.py 中创建一个新命令

from django.core.management.base import BaseCommand, CommandError


class Command(BaseCommand):
    help = "Might wanna add a help text"
    args = '<arg>' # need args?

    def handle(self, *args, **options):
        # Do whatever you want to do 

然后从你的 crontab 运行它。

/path/to/python /path/to/manage.py name_of_command

【讨论】:

    【解决方案3】:

    你也可以这样做:

    do_something.py

    #! /usr/bin/python
    #coding:utf-8
    from __future__ import unicode_literals
    
    import os
    os.environ["DJANGO_SETTINGS_MODULE"] = "prj.settings"
    
    from app.models import YourModel
    
    # do something
    

    将文件放在与 ma​​nage.py

    相同的位置

    如何使用,可以写个.sh脚本

    cd pjc-directory
    python do_something.py
    

    然后使用 crontab 运行此脚本

    【讨论】:

      【解决方案4】:

      你应该从Django-extensionsrunscript命令中获取战利品

      它让您创建简单的 Django 管理命令,其中包含所有 django 环境。

      然后你可以设置一个cron定期执行任务。


      Django Extensions 为你的 Django 项目提供了其他有用的工具,看看吧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        • 2015-09-29
        • 2021-02-08
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 2012-04-03
        相关资源
        最近更新 更多