我已经安排了一些 crontab 作业来抓取一些网站的数据。
我设置了一些 cron 任务,在凌晨 1 点运行爬虫程序,scraper_1 于 1:01 启动,scraper_2 于 1:03 启动,scraper_3 于 1:05 启动
每个抓取程序可能需要 3 到 6 分钟才能完成,因此运行抓取程序之间会有一些重叠时间。
# start on 1:01
01 01 * * * cd /home/ubuntu/jobscrapers/scraper_1 && scrapy crawl spider_1 >> /tmp/scraper.log 2>&1
# start on 1:03
03 01 * * * cd /home/ubuntu/jobscrapers/scraper_2 && scrapy crawl spider_2 >> /tmp/scraper.log 2>&1
# start on 1:05
05 01 * * * cd /home/ubuntu/jobscrapers/scraper_3 && scrapy crawl spider_3 >> /tmp/scraper.log 2>&1
所有这些抓取工具都是使用 Scrapy 编写的,并且使用 Selenium 和 Chrome Web Driver。
代码在我的开发机器(Windows)上运行良好...但最近我在生产机器(Ubuntu)上偶尔会出现一些错误
例如,抓取工具运行一段时间后崩溃并出现以下错误:
selenium.common.exceptions.WebDriverException:消息:未知错误:由于未知错误导致页面崩溃,会话被删除:无法确定选项卡崩溃的加载状态(会话信息:headless chrome=86.0.4240.111)(驱动程序信息:chromedriver=2.41.578700(2f1ed5f9343c13f73144538f15c00b370eda6706),平台=Linux 5.4.0-1029-aws x86_64)
这是因为 2 个 scraper 同时运行吗?crontab 会为每个 scraper (webdriver) 创建一个新线程吗?
更新的问题
问题是服务器上没有剩余空间......
我偶然意识到了这个问题,scrapy日志没有帮助。我是否应该检查其他日志来指出实际问题?
答案1
问题是我的服务器上没有剩余空间:
我使用df -h
命令检查可用空间,发现 / 分区已满:
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 460M 0 475M 0% /dev
tmpfs 478M 0 492M 0% /dev/shm
tmpfs 478M 432K 492M 1% /run
tmpfs 478M 0 492M 0% /sys/fs/cgroup
/dev/nvme0n1p1 8.0G 8.0G 664K 100% /
tmpfs 96M 0 99M 0% /run/user/1000
由于我的服务器是 AWS EC2 实例,因此我必须扩展卷。以下 2 个链接解释了如何扩展 EC2 的卷: