首页 > 解决方案 > 带有 Django 的 ScrapyD 在一段时间后停止运行

问题描述

我在生产服务器上部署了一个带有 scrapyd 的整个 django(2.2) 应用程序。它似乎工作正常,但我最近注意到一个趋势,即爬虫在几天后停止运行。我使用 cronjobs 运行 scrapyD 服务器。

然后使用管理控制,我运行爬虫来抓取网站并将数据存储在 MySQL 数据库中。抓取工作正常 3 天,因为我可以看到调试日志,但是它没有运行,即在 scrapyd 的日志目录中没有生成新日志。

然后我手动运行管理控制以查看问题所在。调用 scrapyd.schedule() 时会引发异常:

文件“/var/www/venv/lib/python3.6/site-packages/scrapyd_api/wrapper.py”,第 188 行,在计划中
json = self.client.post(url, data=data, timeout=self.timeout )

文件“/var/www/venv/lib/python3.6/site-packages/requests/sessions.py”,第 581 行,在 post return self.request('POST', url, data=data, json=json, **kwargs)

请求中的文件“/var/www/venv/lib/python3.6/site-packages/scrapyd_api/client.py”,第 38 行,返回 self._handle_response(response)

_handle_response 中的文件“/var/www/venv/lib/python3.6/site-packages/scrapyd_api/client.py”,第 34 行引发 ScrapydResponseError(json['message'])

scrapyd_api.exceptions.ScrapydResponseError:尝试写入只读数据库

我已经阅读了一些人们建议设置权限的答案。这不是那个,我的目录的权限被设置并且刮板运行了几天。

我通过以下方式重新启动生产服务器sudo reboot

刮板再次运行了几天,然后又神秘地停止了同样的问题。

我正在使用 MySQL 作为数据库。Ubuntu 是 Digital Ocean 的服务器。

我部署了另一台scrapyd服务器,它运行相同的进程,但它只是在运行而不是使用。这两个服务器的端口不同,所以我认为没有冲突。

任何帮助将不胜感激,因为一遍又一遍地重新启动生产服务器似乎非常不合理。我看到了一个类似的问题,它与我所经历的很接近:

https://github.com/scrapy/scrapyd/issues/295

标签: pythondjangocronscrapyscrapyd

解决方案


推荐阅读