首页 文章

Scron履带在Cron工作

提问于
浏览
16

我想从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 回答

  • 2

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

    例如你可以做

    /myfolder/crawlers/getdata.sh
    

    没有sh?

    如果可以,那么你可以把它放在cron的行中

  • 1

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

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

    crontab -e 中添加以下行每天凌晨5点运行我的scrapy爬行 . 这是crocs答案的略微修改版本

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

    如果没有设置 $PATH ,cron会给我一个错误"command not found: scrapy" . 我想这是因为/ usr / bin是运行程序的脚本存储在Ubuntu中的地方 .

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

    调试时,cron日志可能会有所帮助

    grep CRON /var/log/syslog
    
  • 2

    另一个选择是忘记使用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 . 这里第一个将每隔5分钟运行一次,第二个每天运行两次,凌晨1点和下午1点 . 我发现这更容易管理 . 如果您要运行其他二进制文件,则可能需要将其位置添加到路径中 .

  • 21

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

  • 8

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

    使用 crontab -e 打开crontab进行编辑 .

    */5 * * * * cd /myfolder/path && /usr/local/bin/scrapy crawl spider_name

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

相关问题