我正在尝试在虚拟Ubuntu 16.04服务器上运行Scrapyd,我通过SSH连接到该服务器。当我通过简单地运行
运行scrapy时$ scrapyd
我可以转到http://82.165.102.18:6800。
连接到网络界面但是,一旦我关闭SSH连接,Web界面就不再可用,因此,我认为我需要在后台以某种方式运行Scrapyd。
经过一些研究后,我发现了一些建议的解决方案:
有人知道最佳/推荐的解决方案是什么吗?不幸的是,Scrapyd documentation相当薄且过时。
对于某些背景,我需要每天运行大约10-15只蜘蛛。
答案 0 :(得分:4)
使用此命令。
cd /path/to/your/project/folder && nohup scrapyd >& /dev/null &
现在您可以关闭SSH连接,但scrapyd将继续运行。
确保服务器重新启动并自动运行报废。这样做
从您的终端复制echo $PATH
的输出,然后按crontab -e
现在位于该文件的最顶层,请写下
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
:
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"