我正在使用Django Dynamic Scraper构建一个基本的Web scraper。我完成了99%的方式。它与Celery和Scrapyd一起完美地开发。完成任务并完成任务。
至于制作,我很确定我的设置正确: 我正在使用Supervisor在我的VPS上运行Scrapyd和Celery。他们都指向正确的virtualenv装置等......
以下是我知道他们为项目设置好的方法:当我通过SSH连接到我的服务器并使用manage.py shell执行celery任务时,它会返回一个Async任务,然后执行该任务。结果显示在数据库中,我的报废和芹菜日志都显示正在处理的任务。
问题是我的计划任务没有被自动解雇 - 尽管在开发中完美地找到了工作。
# 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 Config:
[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时(正如开发中那样),一切正常。只是当两个人使用主管运行时。
我可能错过了一些设置或其他设置,这会阻止存储在SQLite DB中的芹菜任务在生产时被celery / scrapyd自动拾取和运行。
答案 0 :(得分:1)
好的 - 所以我最终得到了这个工作。也许这可以帮助别人。我的问题是我只有芹菜的一个主管流程,因为它需要两个 - 一个用于实际运行任务(工人),另一个用于监督调度。我只有工人。这解释了为什么当我使用django shell发出任务时(基本上手动将任务传递给worker),一切正常。
这是'scheduler'芹菜过程的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重读 supervisorctl更新 supervisotctl重启所有
我的任务马上就开始了。