scrapyd部署失败主因是服务权限、配置路径或python环境隔离问题;需用venv创建独立环境安装scrapyd,配置bind_address=0.0.0.0和端口6800,通过systemd管理服务并放行防火墙端口,部署时确保scrapy.cfg中deploy段url指向服务器ip且scrapyd-client版本兼容。

Scrapyd 在 Linux 服务器上部署失败,大概率不是代码问题,而是服务启动权限、配置路径或 Python 环境隔离没处理好。直接上手前先确认你用的是 scrapyd 官方包(不是 scrapyd-client),且系统已安装 python3 和 pip。
确认 Python 环境与 Scrapyd 安装方式
Scrapyd 必须运行在独立的 Python 环境中,否则和爬虫项目依赖冲突是常态。别用系统 Python 或全局 pip install。
- 推荐用
venv创建干净环境:python3 -m venv /opt/scrapyd-env
,然后source /opt/scrapyd-env/bin/activate - 激活后只运行:
pip install scrapyd(不要加--user或sudo) - 验证安装:
scrapyd --version能输出版本号才算成功;如果报command not found,说明没激活环境或 PATH 没生效 - 注意:CentOS 7 默认 Python 3.6+ 才支持 Scrapyd 1.3+,低于此版本会提示
ModuleNotFoundError: No module named 'importlib.metadata'
修改 scrapyd.conf 配置文件位置与关键项
Scrapyd 默认读取当前工作目录下的 scrapyd.conf,但生产环境必须指定路径并设为只读,否则部署时容易因路径错乱导致监听地址失效。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 配置文件应放在
/etc/scrapyd/scrapyd.conf(需手动创建目录),启动时用scrapyd -c /etc/scrapyd/scrapyd.conf - 必须显式设置:
bind_address = 0.0.0.0(允许外网访问),port = 6800(别用默认 6800 以外的端口,scrapyd-client默认只认这个) -
eggs_dir和dbs_dir建议指向绝对路径,如/var/lib/scrapyd/eggs,并确保scrapyd进程有写权限(chown -R scrapyd:scrapyd /var/lib/scrapyd) - 别开
max_proc或max_proc_per_cpu过高,Linux 默认 ulimit -u 限制下,设成20更稳妥
用 systemd 管理 Scrapyd 服务(非 nohup 或 screen)
用 nohup scrapyd & 启动看似简单,但进程无法自动拉起、日志难追踪、信号控制失效——线上必须用 systemd。
- 新建服务文件:
/etc/systemd/system/scrapyd.service,内容含User=scrapyd(别用 root)、WorkingDirectory=/opt/scrapyd-env、ExecStart=/opt/scrapyd-env/bin/scrapyd -c /etc/scrapyd/scrapyd.conf - 执行
systemctl daemon-reload后,用systemctl start scrapyd启动;立刻检查状态:systemctl status scrapyd - 常见失败原因:
Failed at step EXEC spawning通常因路径写错或权限不足;Connection refused多半是bind_address写成127.0.0.1或防火墙没放行 6800 端口(ufw allow 6800或firewall-cmd --add-port=6800/tcp) - 日志统一走 journalctl:
journalctl -u scrapyd -f,比查文件更可靠
部署爬虫项目时的 client 配置要点
scrapyd-client 不是部署必需,但若用它上传项目,scrapyd-deploy 命令失败往往卡在配置而非代码。
-
scrapyd-client可全局安装(pip install scrapyd-client),但必须和目标 Scrapyd 服务网络互通,且scrapyd-client版本 >= Scrapyd 服务版本 -
setup.py中的name字段必须小写、无下划线,否则scrapyd-client上传后显示为unknown,后续调度失败 -
scrapy.cfg里[deploy]段必须写明url = http://your-server-ip:6800/,不能写localhost或域名(DNS 解析失败会导致上传超时) - 上传命令:
scrapyd-deploy default -p your_project_name;若提示400 Bad Request,先 curl -X GET http://ip:6800/ 看是否返回 JSON,排除网络和认证问题
真正麻烦的不是部署动作本身,而是 Scrapyd 启动后不报错却无法接收上传——这时候得盯紧 journalctl 里那句 “Started Scrapyd server” 后有没有 “Listening on”,以及 netstat -tuln | grep :6800 是否真绑定了 0.0.0.0。配置写错一行,整个分布式就卡在第一环。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










