Django,Django Dynamic Scraper,Djcelery 和 Scrapyd - 在生产中不发送任务



我正在使用Django Dynamic Scraper来构建一个基本的网络抓取工具。我已经完成了 99%。它与芹菜和Scrapyd一起在开发中完美运行。任务被完美地发送和完成。

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

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

问题是我的计划任务没有自动触发 - 尽管在开发中工作得很好。

# 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

刮板配置:

[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 等)。此外,当我在服务器上手动运行芹菜和刮板时(就像在开发中一样),一切正常。只是当两者使用主管运行时。

我可能缺少一些设置或其他设置,这些设置阻止我存储在 SQLite DB 中的芹菜任务在生产中被芹菜/刮板自动拾取和运行。

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

这是我的"调度程序"芹菜进程的 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

我添加了它并运行:

主管重读 主管CTL更新 监督 重新启动全部

我的任务立即开始运行。

相关内容

  • 没有找到相关文章

最新更新