Python中如何将Scrapy部署到服务器?

小弟敲了一个小爬虫,网上搜到有 scrapyd 方式部署,于是本地 pip install scrapyd。在本地测试完全爬虫跑得妥妥的,于是想仍到 docker 容器里面去。写了一个 DockerFile,内容大致如下:

FROM python:3.5.5
ENV PATH /usr/local/bin:$PATH
ADD . /scrapy_weather
WORKDIR /scrapy_weather
COPY ./scrapyd.conf /etc/scrapyd/
EXPOSE 6800
CMD scrapyd

构建了一个 docker 镜像,然后在自己的 mac 本的 docker 里面跑得飕飕的,没有一点问题,于是把镜像推送出去,结果在 centos 的服务器上面,同样的镜像,会报以下错误:

Another twistd server is running, PID 5

This could either be a previously started instance of your application or a different application entirely. To start a new one, either run it in some other directory, or use the --pidfile and --logfile parameters to avoid clashes.

小弟实在是没招了,想与各位 py 大佬们交流一波,scrapy 的优雅部署方式


Python中如何将Scrapy部署到服务器?

10 回复

哪有什么优雅的方式。
1. 推一份源码,直接跑
2. 推一份源码,用虚拟环境
3. docker

推源码的方式有很多种,scp、git、upload


我无法理解你的问题。

怎么会这样,不应该发生啊

确实很奇怪,在本地的 mac 本的 docker 中跑这个镜像不会报错,但是仍到服务器会报这个错误。然后在本机进入 docker 容器里面,敲 scrapyd 命令也会报同样的错误。实在不知道为什么服务器抽风了😫

按提示的那个 加上 pidfile logfile 试一试呗

去服务器重新 build 试试。感觉像是 pid 文件没删掉?

解决了该问题,是内存不足,直接把容器给 kill 掉了。

如何简单高效地部署和监控分布式爬虫项目 v2ex.com/t/507933

遇到了同样的问题,不过我在 docker 里面运行就不会报错,在外面用 entrypoint 或者 CMD 就都会报错,楼主最后是怎么解决的呢? 内存不足是指容器里面还是 host 中?

感谢,解决了。果然是因为 twistd.pid 文件没有删除。

回到顶部