在后台/作为服务运行Scrapyd的首选方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在后台/作为服务运行Scrapyd的首选方法相关的知识,希望对你有一定的参考价值。
我试图在虚拟Ubuntu 16.04服务器上运行Scrapyd,我通过SSH连接到该服务器。当我通过简单的跑步来运行scrapy时
$ scrapyd
我可以通过访问http://82.165.102.18:6800连接到Web界面。
但是,一旦我关闭SSH连接,Web界面就不再可用,因此,我认为我需要在后台以某种方式运行Scrapyd作为服务。
经过一些研究后,我发现了一些建议的解决方案:
- 守护进程(sudo apt install守护进程)
- 屏幕(sudo apt安装屏幕)
- tmux(sudo apt install tmux)
有人知道最佳/推荐的解决方案是什么吗?不幸的是,Scrapyd documentation相当薄,过时。
在某些背景下,我需要每天运行大约10-15个蜘蛛。
使用此命令。
cd /path/to/your/project/folder && nohup scrapyd >& /dev/null &
现在您可以关闭SSH连接,但scrapyd将继续运行。
并确保每当您的服务器重新启动并且scrapyd自动运行时。做这个
从您的终端复制echo $PATH
的输出,然后通过crontab -e
打开您的crontab
现在位于该文件的最顶层,写下这个
PATH=YOUR_COPIED_CONTENT
现在在你的crontab的末尾,写下这个。
@reboot cd /path/to/your/project/folder && nohup scrapyd >& /dev/null &
这意味着,每次重新启动服务器时,命令cd /path/to/your/project/folder && nohup scrapyd >& /dev/null &
都将自动运行
要将scrapyd作为守护程序运行,您可以简单地执行:
$ scrapyd &
&最后使scrapyd作为守护进程运行。
或者,您可以运行以下命令在scrapy文件夹上加载服务:
$ daemon --chdir=/home/ubuntu/crawler scrapyd
正如您所提到的,要使用“守护进程”,您需要先在您的ubuntu上安装守护进程
$ sudo apt-get install daemon
通过上述方法之一将scrapyd作为守护程序运行后,您应该能够在关闭ssh连接后访问scrapyd Web界面。
如果你在Ubuntu服务器上安装了Scrapyd,我会把这个命令放在/etc/rc.local
文件的末尾:
<path_to_scrapyd_binary>/scrapyd > /dev/null 2>&1 &
其中<path_to_scrapyd_binary>
可能会像/usr/local/bin
。当您不想构建自己的服务文件或启动脚本时,/etc/rc.local
最适合此类情况。还有人建议将命令放在Cron表中,使用@reboot
,但由于某些原因,这有时对我不起作用(尽管我没有深入研究这些原因)。
我现在仍然首选的选择是在Docker中部署Scrapyd。你可以从Docker Hub获得Scrapyd image。或者,如果您有特定需求,您可以自己构建图像。我选择了第二种选择。首先,我为此目的部署了自己的Docker存储库。完成后,我使用这个Dockerfile
构建了我自己的Scrapyd图像:
FROM ubuntu:16.04
RUN apt-get update -q
&& apt-get install -y --no-install-recommends
build-essential
ca-certificates
curl
libffi-dev
libjpeg-turbo8
liblcms2-2
libssl-dev
libtiff5
libtool
libwebp5
python
python-dev
zlib1g
&& curl -sSL https://bootstrap.pypa.io/get-pip.py | python
&& pip install --no-cache-dir
docker
future
geocoder
influxdb
Pillow
pymongo
scrapy-fake-useragent
scrapy_splash
scrapyd
selenium
unicode-slugify
&& apt-get purge -y --auto-remove
build-essential
curl
libffi-dev
libssl-dev
libtool
python-dev
&& rm -rf /var/lib/apt/lists/*
COPY ./scrapyd.conf /etc/scrapyd/
VOLUME /etc/scrapyd /var/lib/scrapyd
EXPOSE 6800
CMD ["scrapyd", "--logfile=/var/log/scrapyd.log", "--pidfile="]
在构建映像并将其推入注册表之后,我可以将其部署到我需要的(或者当然是本地的)多个工作服务器。拉出图像(从Docker Hub或您自己的图像中拉出)后,您可以使用以下命令启动它:
sudo docker run --name=scrapyd -d -p 6800:6800 --restart=always -v /var/lib/scrapyd:/var/lib/scrapyd --add-host="dockerhost:"`ip addr show docker0 | grep -Po 'inet K[d.]+'` <location>/scrapyd
其中<location>
是Docker Hub帐户,或者它指向您自己的注册表。这个相当复杂的命令在后台启动Scrapyd图像(-d
选项),每次Docker服务(重新)启动时都在端口6800上监听(--restart=always
选项)。它还将您的主机IP地址作为dockerhost
发布到容器,以用于需要访问主机上其他(可能是Dockerized)服务的情况。
Supervisor是一个很好的方法来守护scrapyd。安装通常很简单。设置好后,启动和停止服务就像以下一样简单:
$ supervisorctl start scrapyd
$ supervisorctl stop scrapyd
如果选择此路由,请注意supervisord可能会发出有关未找到配置文件的警告。解决此问题的一种方法是在init.d脚本中添加对配置的引用:
prog_bin="${exec_prefix}/bin/supervisord -c /etc/supervisord.conf"
以上是关于在后台/作为服务运行Scrapyd的首选方法的主要内容,如果未能解决你的问题,请参考以下文章