24

我想从 cron job 执行我的爬虫。

我用它的蜘蛛创建了scrapy项目所在的bash文件getdata.sh

#!/bin/bash
cd /myfolder/crawlers/
scrapy crawl my_spider_name

我的 crontab 看起来像这样,我想每 5 分钟执行一次

 */5 * * * * sh /myfolder/crawlers/getdata.sh 

但它不起作用,怎么了,我的错误在哪里?

当我从终端 sh /myfolder/crawlers/getdata.sh 执行我的 bash 文件时,它工作正常

4

7 回答 7

30

我解决了这个问题,包括 PATH 进入 bash 文件

#!/bin/bash

cd /myfolder/crawlers/
PATH=$PATH:/usr/local/bin
export PATH
scrapy crawl my_spider_name
于 2013-06-21T13:01:51.160 回答
12

crontab -e在每天早上 5 点添加以下行来运行我的爬虫爬虫。这是 crocs 答案的略微修改版本

PATH=/usr/bin
* 5 * * * cd project_folder/project_name/ && scrapy crawl spider_name

如果没有设置$PATH,cron 会给我一个错误“找不到命令:scrapy”。我猜这是因为 /usr/bin 是运行程序的脚本存储在 Ubuntu 中的位置。

请注意,我的 scrapy 项目的完整路径是/home/user/project_folder/project_name. 我在 cron 中运行了 env 命令,发现工作目录是/home/user. 因此我跳过/home/user了上面的 crontab

cron 日志在调试时很有帮助

grep CRON /var/log/syslog
于 2015-10-12T21:21:55.403 回答
5

对于使用pip3(或类似)安装的任何人scrapy,这是一个简单的内联解决方案:

*/10 * * * * cd ~/project/path && ~/.local/bin/scrapy crawl something >> ~/crawl.log 2>&1

代替:

*/10 * * * *用你的 cron 模式

~/project/path带有您的scrapy项目的路径(您所在的scrapy.cfg位置)

something使用蜘蛛名称(scrapy list在您的项目中使用以找出答案)

~/crawl.log与您的日志文件位置(以防您想要记录)

于 2017-06-19T16:54:23.957 回答
3

另一种选择是忘记使用 shell 脚本并直接在 cronjob 中将两个命令链接在一起。只需确保在 crontab 列表中的第一个 scrapy cronjob 之前设置 PATH 变量。跑:

    crontab -e 

编辑并查看。我有几个在不同时间运行的爬虫。有的每 5 分钟一次,有的每天两次。

    PATH=/usr/local/bin
    */5 * * * * user cd /myfolder/crawlers/ && scrapy crawl my_spider_name_1
    * 1,13 * * * user cd /myfolder/crawlers/ && scrapy crawl my_spider_name_2

位于 PATH 变量之后的所有作业都将找到scrapy。在这里,第一个将每 5 分钟运行一次,第二个将在每天凌晨 1 点和下午 1 点运行两次。我发现这更容易管理。如果您有其他二进制文件要运行,那么您可能需要将它们的位置添加到路径中。

于 2015-05-20T00:22:29.047 回答
1

使用“which scrapy”命令检查 scrapy 的安装位置。就我而言,scrapy 安装在/usr/local/bin.

打开 crontab 进行编辑,使用crontab -e. PATH=$PATH:/usr/local/bin export PATH */5 * * * * cd /myfolder/path && scrapy crawl spider_name

它应该工作。Scrapy 每 5 分钟运行一次。

于 2018-10-17T19:36:03.547 回答
0

你的shell脚本有执行权限吗?

例如,你能做到吗

  /myfolder/crawlers/getdata.sh 

没有 sh?

如果可以,那么您可以将 sh 放在 cron 的行中

于 2013-06-21T12:23:31.017 回答
0

在我的情况下,scrapy 在.local/bin/scrapy 中给出了正确的刮板路径并将其命名为完美

0 0 * * * cd /home/user/scraper/Folder_of_scriper/ && /home/user/.local/bin/scrapy crawl "name" >> /home/user/scrapy.log 2>&1

/home/user/scrapy.log它用于将输出和错误保存在 scrapy.log 中以检查它是否可以正常工作

谢谢你。

于 2018-12-20T07:24:00.873 回答