在Cron工作的Scrapy履带

我想从cron作业执行我的scrapy爬虫。

我创buildbash文件getdata.sh其中scrapy项目与它的蜘蛛位于

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

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

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

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

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

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

 #!/bin/bash cd /myfolder/crawlers/ PATH=$PATH:/usr/local/bin export PATH scrapy crawl my_spider_name 

crontab -e添加以下行,每天在5AM运行我的scrapy爬行。 这是对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 。 因此,我在上面的crontab中跳过了/home/user

cron日志可以在调试时有帮助

 grep CRON /var/log/syslog 

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

  crontab -e 

编辑并看看。 我有几个scrapy爬虫在不同的时间运行。 每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。 在这里,第一个每天上午1点和下午1点每5分钟和2次运行一次。 我发现这更容易管理。 如果您有其他二进制文件需要运行,则可能需要将其位置添加到路径中。

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

你能做吗?

  /myfolder/crawlers/getdata.sh 

没有sh?

如果可以的话,你可以在cron中删除sh

对于任何使用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与你的日志文件的位置(如果你想记录)