我想从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
与你的日志文件的位置(如果你想记录)