我有Scrapy
蜘蛛,我每小时使用bash
脚本和crontab
运行。
蜘蛛的运行时间约为50分钟,但可能超过一小时。
我想要的是检查蜘蛛是否正在运行,只有不运行,开始新的爬行。
BASH SCRIPT
#!/usr/bin/env bash
source /home/milano/.virtualenvs/keywords_search/bin/activate
cd /home/milano/PycharmProjects/keywords_search/bot
# HERE I WANT TO CHECK, WHETHER THE PREVIOUS CRAWLING ALREADY STOPPED, IF NOT, DO NOTHING
scrapy crawl main_spider
我唯一想到的就是使用telnet
。
如果它可以连接 - telnet localhost 6023
,这意味着蜘蛛仍在运行,否则我可以运行蜘蛛。
答案 0 :(得分:1)
您需要某种锁定机制。
从bash实现原子锁的最佳方法是使用mkdir并检查结果代码以了解是否获得了锁。
以下是更深入的解释:http://wiki.bash-hackers.org/howto/mutex
当然,你总是可以选择更脏的方法,例如grep on process names或类似的东西。
你也可以锁定scrapy本身,为共享资源添加一个简单的中间件检查......有很多方法可以做到这一点:)