在后台/作为服务运行Scrapyd的首选方法

问题描述 投票:1回答:4

我试图在虚拟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个蜘蛛。

ubuntu scrapy scrapyd
4个回答
4
投票

使用此命令。

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 &都将自动运行


3
投票

要将scrapyd作为守护程序运行,您可以简单地执行:

$ scrapyd &

&最后使scrapyd作为守护进程运行。

或者,您可以运行以下命令在scrapy文件夹上加载服务:

$ daemon --chdir=/home/ubuntu/crawler scrapyd

正如您所提到的,要使用“守护进程”,您需要先在您的ubuntu上安装守护进程

$ sudo apt-get install daemon

通过上述方法之一将scrapyd作为守护程序运行后,您应该能够在关闭ssh连接后访问scrapyd Web界面。


1
投票

如果你在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)服务的情况。


1
投票

Supervisor是一个很好的方法来守护scrapyd。安装通常很简单。设置好后,启动和停止服务就像以下一样简单:

$ supervisorctl start scrapyd
$ supervisorctl stop scrapyd

如果选择此路由,请注意supervisord可能会发出有关未找到配置文件的警告。解决此问题的一种方法是在init.d脚本中添加对配置的引用:

prog_bin="${exec_prefix}/bin/supervisord -c /etc/supervisord.conf"
© www.soinside.com 2019 - 2024. All rights reserved.