我想从cron job执行我的scrapy crawler .
我创建了bash文件getdata.sh,其中scrapy项目位于它的蜘蛛
#!/bin/bash
cd /myfolder/crawlers/
scrapy crawl my_spider_name
我的crontab看起来像这样,我想每5分钟执行一次
*/5 * * * * sh /myfolder/crawlers/getdata.sh
但它不起作用,什么是错的,我的错误在哪里?
当我从终端sh /myfolder/crawlers/getdata.sh执行我的bash文件时,它工作正常
6 回答
你的shell脚本有执行权限吗?
例如你可以做
没有sh?
如果可以,那么你可以把它放在cron的行中
我解决了这个问题,包括PATH到bash文件
在
crontab -e
中添加以下行每天凌晨5点运行我的scrapy爬行 . 这是crocs答案的略微修改版本如果没有设置
$PATH
,cron会给我一个错误"command not found: scrapy" . 我想这是因为/ usr / bin是运行程序的脚本存储在Ubuntu中的地方 .请注意,我的scrapy项目的完整路径是
/home/user/project_folder/project_name
. 我在cron中运行了env命令,注意到工作目录是/home/user
. 因此我在上面的crontab中跳过/home/user
调试时,cron日志可能会有所帮助
另一个选择是忘记使用shell脚本并将这两个命令直接链接在cronjob中 . 只需确保在crontab列表中的第一个scrapy cronjob之前设置了PATH变量 . 跑:
编辑并看看 . 我有几个scrapy爬行器在不同的时间运行 . 大约每5分钟一次,其他每天两次 .
位于PATH变量之后的所有作业都将找到scrapy . 这里第一个将每隔5分钟运行一次,第二个每天运行两次,凌晨1点和下午1点 . 我发现这更容易管理 . 如果您要运行其他二进制文件,则可能需要将其位置添加到路径中 .
对于使用
pip3
(或类似)安装scrapy
的任何人来说,这是一个简单的内联解决方案:更换:
*/10 * * * *
与你的cron模式~/project/path
与您的scrapy项目的路径(您的scrapy.cfg
所在的位置)something
带有蜘蛛名称(在项目中使用scrapy list
查找)~/crawl.log
与您的日志文件位置(如果您想要记录日志)使用"which scrapy"命令检查scrapy的安装位置 . 就我而言,scrapy安装在
/usr/local/bin
中 .使用
crontab -e
打开crontab进行编辑 .*/5 * * * * cd /myfolder/path && /usr/local/bin/scrapy crawl spider_name
它应该工作 . Scrapy每5分钟运行一次 .