【问题标题】:Django, Django Dynamic Scraper, Djcelery and Scrapyd - Not Sending Tasks in ProductionDjango、Django Dynamic Sc​​raper、Djcelery 和 Scrapyd - 不在生产环境中发送任务
【发布时间】:2017-08-28 14:57:28
【问题描述】:

我正在使用 Django Dynamic Sc​​raper 构建一个基本的网络爬虫。我已经完成了 99% 的工作。它与 Celery 和 Scrapyd 一起在开发中完美运行。任务已发送并完美完成。

至于生产,我很确定我的设置正确: 我正在使用 Supervisor 在我的 VPS 上运行 Scrapyd 和 Celery。他们都指向正确的 virtualenv 安装等......

以下是我如何知道它们都为项目设置得很好:当我通过 SSH 连接到我的服务器并使用 manage.py shell 执行 celery 任务时,它会返回一个 Async 任务,然后执行该任务。结果出现在数据库中,我的 scrapyd 和 celery 日志都显示了正在处理的任务。

问题是我的计划任务没有被自动触发 - 尽管在开发中完美地工作。

# django-celery settings

import djcelery
djcelery.setup_loader()
BROKER_URL = 'django://'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

还有我的主管配置:

芹菜配置:

[program:IG_Tracker]
command=/home/dean/Development/IG_Tracker/venv/bin/celery --
app=IG_Tracker.celery:app worker --loglevel=INFO -n worker.%%h
directory=/home/dean/Development/IG_Tracker/
user=root
numprocs=1
stdout_logfile=/home/dean/Development/IG_Tracker/celery-worker.log
stderr_logfile=/home/dean/Development/IG_Tracker/celery-worker.log
autostart=true
autorestart=true
startsecs=10

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600
killasgroup=true
priority=998

Scrapyd 配置:

[program:scrapyd]
directory=/home/dean/Development/IG_Tracker/instagram/ig_scraper
command=/home/dean/Development/IG_Tracker/venv/bin/scrapyd
environment=MY_SETTINGS=/home/dean/Development/IG_Tracker/IG_Trackersettings.py
user=dean
autostart=true
autorestart=true
redirect_stderr=true
numprocs=1
stdout_logfile=/home/dean/Development/IG_Tracker/scrapyd.log
stderr_logfile=/home/dean/Development/IG_Tracker/scrapyd.log
startsecs=10

我尽可能地关注文档,并使用推荐的部署工具(例如,scrapyd-deploy 等...)。此外,当我在服务器上手动运行 celery 和 scrapyd 时(就像在开发中那样),一切正常。只是当这两个使用supervisor运行时。

我可能缺少某些设置或其他设置,这会阻止存储在 SQLite DB 中的 celery 任务在生产时被 celery/scrapyd 自动拾取和运行。

【问题讨论】:

  • 当我在“后台”从 Supervisor 运行 scrapyd,但使用 'python manage.py celeryd -l info -B --settings=IG_Tracker.settings' 运行 celery 时,一切正常并且 celery 播放对scrapyd过程很好。所以我认为问题出在 Celery/Django 方面。
  • 请您的主管配置
  • 将它们添加到问题中。主要区别是我尝试以 root 身份运行 celery 但无济于事....

标签: python django scrapy celery django-dynamic-scraper


【解决方案1】:

好的 - 所以我最终得到了这个工作。也许这可以帮助别人。我的问题是我只有一个 celery 主管进程,因为它需要两个 - 一个用于实际运行任务(工人),另一个用于监督调度。我只有工人。这解释了为什么当我使用 django shell 启动任务时一切正常(基本上是手动将任务传递给工作人员)。

这是我的“调度程序”芹菜进程的 conf 文件:

[program:celery_beat]
command=/home/dean/Development/IG_Tracker/venv/bin/celery beat -A 
IG_Tracker --loglevel=INFO
directory=/home/dean/Development/IG_Tracker/
user=root
numprocs=1
stdout_logfile=/home/dean/Development/IG_Tracker/celery-worker.log
stderr_logfile=/home/dean/Development/IG_Tracker/celery-worker.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
killasgroup=true
priority=998

我添加并运行:

supervisorctl 重读 主管更新 supervisotctl 全部重启

我的任务立即开始运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2012-08-28
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多