一、scrapyd 配置
scrapyd配置文件名scrapyd.conf 位置为执行scrapyd的目录
[scrapyd]
eggs_dir = eggs # egg文件存放目录 eggs_dir/project/****.egg
logs_dir = logs # 日志文件存放目录 logs_dir/project/spidername/****.log
items_dir = items # item文件存放目录 items_dir/project/spidername/***.jl
jobs_to_keep = 5 # 保留log日志文件数量
dbs_dir = dbs # 存放sqlitedb文件目录 dbs_dir/**.db
max_proc = 0 # 启动scrapyd进程最大数,设置为0则默认最大进程数为 cpus数*max_proc_per_cpu
max_proc_per_cpu = 4 # 每个cpu启动scrapyd进程数
finished_to_keep = 100 # 保留jobs的数量,超过该数自动删除之前的记录
poll_interval = 5.0 # 每次拉去任务的间隔时间
bind_address = 127.0.0.1 # tcp服务绑定的IP
http_port = 6800 # tcp服务绑定端口号
username = # 设置用户名
password = # 设置密码
debug = off # 是否开启debug True or False
runner = scrapyd.runner # 默认的启动类
jobstorage = scrapyd.jobstorage.MemoryJobStorage # jobs保存方式 scrapyd.jobstorage.MemoryJobStorage|scrapyd.jobstorage.SqliteJobStorage 内存保存和sqlite保存
application = scrapyd.app.application # 调用scrapy服务类
launcher = scrapyd.launcher.Launcher # 任务调度启动类
webroot = scrapyd.website.Root # web页面启动类
eggstorage = scrapyd.eggstorage.FilesystemEggStorage # 管理egg文件
[services]
schedule.json = scrapyd.webservice.Schedule # 添加任务接口
cancel.json = scrapyd.webservice.Cancel # 取消任务接口
addversion.json = scrapyd.webservice.AddVersion # 添加project接口
listprojects.json = scrapyd.webservice.ListProjects # 查询所有project项目接口
listversions.json = scrapyd.webservice.ListVersions # 查询所有project 的version接口
listspiders.json = scrapyd.webservice.ListSpiders # 查询project,version下所有的spider
delproject.json = scrapyd.webservice.DeleteProject # 删除project
delversion.json = scrapyd.webservice.DeleteVersion # 删除project指定version
listjobs.json = scrapyd.webservice.ListJobs # 查询出所有项目 包括历史任务,正在执行任务,等待执行任务
daemonstatus.json = scrapyd.webservice.DaemonStatus # 查询scrapyd server的状态
二、scrapyd任务调度示意图
scrapyd任务执行的步骤
- 通过schedule.json接口添加任务到SpiderScheduler中,任务队列实现为SqliteSpiderQueue中保存
- QueuePoller为任务获取队列,每间隔poll_interval秒主动下拉获取SqliteSpiderQueue任务
- Launcher执行器开启max_proc个队列执行获取的任务,实时监控执行