我需要使用django_cron的帮助

我需要使用django_cron的帮助,django,hdfs,livy,django-cron,Django,Hdfs,Livy,Django Cron,我目前正在与HDFS、ApacheLivy和Django合作,其目标是发送一个请求,以运行一些存储在HDFS中的代码,并调用Livy来创建批处理。现在,一切正常,我有一个基本的字数存储在HDFS中,有一个.txt文件,在htlm页面上,我只需点击一个简单的按钮就可以启动整个过程 我成功地创建了wordcount结果,我的下一步是从Livy那里获取信息,例如当前启动/运行/停止/成功的会话(或批处理)的ID某种回调,但我需要它来自我实现,这样我就可以知道每个会话的状态。为此,我认为可以使用Djan

我目前正在与HDFS、ApacheLivy和Django合作,其目标是发送一个请求,以运行一些存储在HDFS中的代码,并调用Livy来创建批处理。现在,一切正常,我有一个基本的字数存储在HDFS中,有一个.txt文件,在htlm页面上,我只需点击一个简单的按钮就可以启动整个过程

我成功地创建了wordcount结果,我的下一步是从Livy那里获取信息,例如当前启动/运行/停止/成功的会话(或批处理)的ID某种回调,但我需要它来自我实现,这样我就可以知道每个会话的状态。为此,我认为可以使用Django cron,因此无法正确设置它。我没有错误,但没有更多的事情发生。我错过了什么

目前正在Centos7上工作,但我在Python3.6中使用Conda环境,Django是最新版本,livy和HDFS(最新版本)也是如此

以下是我当前的文件:

livy.html

{%load static%}
{{result.sessions}
views.py

从django.exe导入渲染
从django.http导入HttpResponse
从django_cron导入CronJobBase,计划
导入字数,livy
#在这里创建您的视图。
类CheckIdCronJob(CronJobBase):
每分钟运行一次=每分钟运行一次
计划=计划(每分钟运行=每分钟运行)
代码='button.CheckIdCronJob'#一个唯一的代码
def索引(请求):
if(request.GET.GET('mybtn')):
r=livy.send(request.GET.GET('mytextbox'))#(/test/LICENSE.txt)
返回呈现(请求,'button/livy.html',{'result':r})
返回渲染(请求,'button/livy.html')
利维

import json, pprint, requests, textwrap

def send(inputText):
    host = 'http://localhost:8998'
    data = {"file":"/myapp/wordcount.py", "args":[inputText,"2"]}
    headers = {'Content-Type': 'application/json'}
    r = requests.post(host + '/batches', data=json.dumps(data), headers=headers)
    r = requests.get(host + '/batches' + '', data=json.dumps(data), headers=headers)
    return r.json()

django crontab所做的只是使编写运行作业的管理命令变得容易,并指定这些作业应该运行的频率/时间。最后,您将得到一个管理命令
/manage.py runcron
,该命令将检查所有作业,并在需要时运行它们

它没有做到的是持续运行
runcron
,如果您想确保作业在正确的时间运行,那么这就是您实际需要的。基本上,您希望
runcron
每分钟运行一次(或者如果时间不是那么关键,那么每10分钟运行一次),因此您仍然需要使用一些系统守护进程来实现这一点

crontab
在CentOS上可用,可用于此目的。django crontab的安装向您展示了如何创建一个crontab,该crontab将每5分钟运行一次
runcron

crontab -e
*/5 * * * * source /home/ubuntu/.bashrc && source /home/ubuntu/work/your-project/bin/activate && python /home/ubuntu/work/your-project/src/manage.py runcrons > /home/ubuntu/cronjob.log
您必须调整它以适应您的用例:

  • 如果只执行
    crontab-e…
    操作,作业将以您当前登录的用户身份运行。该用户可能不是运行
    manage.py
    命令的正确用户,因为该用户需要具有运行项目的正确权限。使用
    -u user
    为其他用户创建crontab

    在生产环境中运行时,这实际上是一件复杂的事情:获得正确的用户权限并获得运行各种任务的正确用户。通常,您会有一个
    www-data
    apache
    用户运行您的服务器(因此也是django应用程序),您希望该用户运行
    manage.py
    命令。它不应该
    root
    运行apache,因为这会带来安全风险(您的web服务器将拥有对整个系统的完全访问权)

  • 上面的命令源于.bashrc,以确保环境变量设置正确/home/ubuntu/只是用户
    ubuntu
    的用户主目录。适当地改变这一点
  • 上面的命令还将激活virtualenv,以便manage.py命令可以与所有正确的依赖项一起运行。根据您的虚拟环境调整路径
  • 最后,您需要通过设置Django_settings_MODULE环境变量(您可以在.bashrc中执行此操作,因此可以使用
    源代码
    或将
    --settings path.to.settings
    选项传递到
    manage.py
    来确保正确的Django设置被激活
  • 最后一部分是将任务的输出定向到日志文件,以便在出现问题时进行故障排除。请在末尾添加
    2>&1
    ,以便cron错误(stderr)也被定向到同一日志

要检查crontab,请对当前登录的用户运行
crontab-l
,或对其他用户运行
crontab-l-u用户

django crontab所做的只是简化编写运行作业的管理命令,并指定这些作业的运行频率/时间。最后,您将得到一个管理命令
/manage.py runcron
,该命令将检查所有作业,并在需要时运行它们

它没有做到的是持续运行
runcron
,如果您想确保作业在正确的时间运行,那么这就是您实际需要的。基本上,您希望
runcron
每分钟运行一次(或者如果时间不是那么关键,那么每10分钟运行一次),因此您仍然需要使用一些系统守护进程来实现这一点

crontab
在CentOS上可用,可用于此目的。django crontab的安装向您展示了如何创建一个crontab,该crontab将每5分钟运行一次
runcron

crontab -e
*/5 * * * * source /home/ubuntu/.bashrc && source /home/ubuntu/work/your-project/bin/activate && python /home/ubuntu/work/your-project/src/manage.py runcrons > /home/ubuntu/cronjob.log
您必须调整它以适应您的用例:

  • 如果只执行
    crontab-e…
    操作,作业将以您当前登录的用户身份运行。该用户可能不是运行
    manage.py
    命令的正确用户,因为该用户需要具有运行项目的正确权限。使用
    -u user
    为其他用户创建crontab

    在生产环境中运行时,这实际上是一件复杂的事情:获得正确的用户权限并获得正确的用户来运行