在后台/作为服务运行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的首选方法的主要内容,如果未能解决你的问题,请参考以下文章

scrapyd打包到服务器运行

分布式爬虫的部署之Scrapyd对接Docker

在手机上部署运行scrapyd服务

bat----服务器重启后爬虫自动运行

ScrapyRT 与 Scrapyd

编写本机代码作为后台从服务器获取数据[关闭]