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

时间:2017-11-01 23:27:06

标签: ubuntu scrapy scrapyd

我正在尝试在虚拟Ubuntu 16.04服务器上运行Scrapyd,我通过SSH连接到该服务器。当我通过简单地运行

运行scrapy时
$ scrapyd

我可以转到http://82.165.102.18:6800

连接到网络界面

但是,一旦我关闭SSH连接,Web界面就不再可用,因此,我认为我需要在后台以某种方式运行Scrapyd。

经过一些研究后,我发现了一些建议的解决方案:

  • 守护进程(sudo apt install daemon)
  • 屏幕(sudo apt安装屏幕)
  • tmux(sudo apt install tmux)

有人知道最佳/推荐的解决方案是什么吗?不幸的是,Scrapyd documentation相当薄且过时。

对于某些背景,我需要每天运行大约10-15只蜘蛛。

4 个答案:

答案 0 :(得分:4)

使用此命令。

cd /path/to/your/project/folder && nohup scrapyd >& /dev/null &

现在您可以关闭SSH连接,但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 &都将自动运行

答案 1 :(得分:3)

要让scrapyd作为守护进程运行,您只需执行以下操作:

$ scrapyd &

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

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

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

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

$ sudo apt-get install daemon

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

答案 2 :(得分: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帐户,或者它指向您自己的注册表。这个相当复杂的命令在后台(-d选项)启动Scrapyd映像,每次Docker服务(重新)启动时都在端口6800上监听(--restart=always选项)。它还会将您的主机IP地址dockerhost发布到容器,以用于需要访问主机上其他(可能是Dockerized)服务的情况。

答案 3 :(得分:1)

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

$ supervisorctl start scrapyd
$ supervisorctl stop scrapyd

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

prog_bin="${exec_prefix}/bin/supervisord -c /etc/supervisord.conf"