运行 Scrapyd 在后台/作为服务的首选方式
Preferred way to run Scrapyd in the background / as a service
我正在尝试 运行 在虚拟 Ubuntu 16.04 服务器上使用 Scrapyd,我通过 SSH 连接到该服务器。当我 运行 简单地 运行ning
$ scrapyd
我可以通过 http://82.165.102.18:6800.
连接到 Web 界面
但是,一旦我关闭 SSH 连接,Web 界面就不再可用,因此,我想我需要 运行 Scrapyd 以某种方式在后台作为服务。
经过一些研究,我发现了一些建议的解决方案:
- 守护进程(sudo apt 安装守护进程)
- 屏幕(sudo apt 安装屏幕)
- tmux(sudo apt 安装 tmux)
有人知道最好/推荐的解决方案是什么吗?不幸的是,Scrapyd documentation 相当单薄且已过时。
对于某些背景,我每天需要 运行 大约 10-15 个蜘蛛。
将ScrapyD设为系统服务
sudo nano /lib/systemd/system/scrapyd.service
然后复制粘贴如下
[Unit]
Description=Scrapyd service
After=network.target
[Service]
User=<YOUR-USER>
Group=<USER-GROUP>
WorkingDirectory=/any/directory/here
ExecStart=/usr/local/bin/scrapyd
[Install]
WantedBy=multi-user.target
然后启用服务
systemctl enable scrapyd.service
然后启动服务
systemctl start scrapyd.service
不推荐的另一种方法
使用这个命令。
cd /path/to/your/project/folder && nohup scrapyd >& /dev/null &
现在您可以关闭 SSH 连接,但 scrapyd 将保持 运行ning。
并确保每当您的服务器重新启动并自动启动 scrapyd 运行s。这样做
从您的终端复制 echo $PATH
的输出,然后通过 crontab -e
打开您的 crontab
现在在该文件的最顶部,写下这个
PATH=YOUR_COPIED_CONTENT
现在在你的 crontab 的末尾,写下这个。
@reboot cd /path/to/your/project/folder && nohup scrapyd >& /dev/null &
这意味着,每次您的服务器重新启动时,上面的命令都会自动 运行
如果你在 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 table 和 @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 帐户,或者它指向您自己的注册表。每次 Docker 服务(重新)启动(--restart=always
选项)时,这个相当复杂的命令都会在后台启动 Scrapyd 图像(-d
选项)监听端口 6800。它还将您的主机 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 运行 成为守护进程。
或者,您可以运行以下命令将服务加载到scrapy文件夹:
$ daemon --chdir=/home/ubuntu/crawler scrapyd
如您所述,要使用 "daemon",您需要先通过
在 ubuntu 上安装守护程序
$ sudo apt-get install daemon
通过执行上述方法之一将 scrapyd 运行 作为守护进程后,您应该能够在关闭 ssh 连接后访问 scrapyd 网络界面。
我正在尝试 运行 在虚拟 Ubuntu 16.04 服务器上使用 Scrapyd,我通过 SSH 连接到该服务器。当我 运行 简单地 运行ning
$ scrapyd
我可以通过 http://82.165.102.18:6800.
连接到 Web 界面但是,一旦我关闭 SSH 连接,Web 界面就不再可用,因此,我想我需要 运行 Scrapyd 以某种方式在后台作为服务。
经过一些研究,我发现了一些建议的解决方案:
- 守护进程(sudo apt 安装守护进程)
- 屏幕(sudo apt 安装屏幕)
- tmux(sudo apt 安装 tmux)
有人知道最好/推荐的解决方案是什么吗?不幸的是,Scrapyd documentation 相当单薄且已过时。
对于某些背景,我每天需要 运行 大约 10-15 个蜘蛛。
将ScrapyD设为系统服务
sudo nano /lib/systemd/system/scrapyd.service
然后复制粘贴如下
[Unit]
Description=Scrapyd service
After=network.target
[Service]
User=<YOUR-USER>
Group=<USER-GROUP>
WorkingDirectory=/any/directory/here
ExecStart=/usr/local/bin/scrapyd
[Install]
WantedBy=multi-user.target
然后启用服务
systemctl enable scrapyd.service
然后启动服务
systemctl start scrapyd.service
不推荐的另一种方法
使用这个命令。
cd /path/to/your/project/folder && nohup scrapyd >& /dev/null &
现在您可以关闭 SSH 连接,但 scrapyd 将保持 运行ning。
并确保每当您的服务器重新启动并自动启动 scrapyd 运行s。这样做
从您的终端复制 echo $PATH
的输出,然后通过 crontab -e
现在在该文件的最顶部,写下这个
PATH=YOUR_COPIED_CONTENT
现在在你的 crontab 的末尾,写下这个。
@reboot cd /path/to/your/project/folder && nohup scrapyd >& /dev/null &
这意味着,每次您的服务器重新启动时,上面的命令都会自动 运行
如果你在 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 table 和 @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 帐户,或者它指向您自己的注册表。每次 Docker 服务(重新)启动(--restart=always
选项)时,这个相当复杂的命令都会在后台启动 Scrapyd 图像(-d
选项)监听端口 6800。它还将您的主机 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 运行 成为守护进程。
或者,您可以运行以下命令将服务加载到scrapy文件夹:
$ daemon --chdir=/home/ubuntu/crawler scrapyd
如您所述,要使用 "daemon",您需要先通过
在 ubuntu 上安装守护程序$ sudo apt-get install daemon
通过执行上述方法之一将 scrapyd 运行 作为守护进程后,您应该能够在关闭 ssh 连接后访问 scrapyd 网络界面。