-
Notifications
You must be signed in to change notification settings - Fork 508
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
定时任务有时无法正常执行,能否加上重试机制 #83
Comments
真是巧,立刻就看到一个类似的新issue。#84 (comment) |
发起了一个PR,不知道是否能合并到这个分支?#85 |
同样遇到这样的问题 |
重试之后有用吗?? |
有用是有用,不过之后又遇到了其它同步状态出错得问题。我的理解是这样的。SpiderKeeper调用Scrapyd的任何一个API都有可能会各种原因失败(比如网络异常,或者scrapyd本身被请求得太频繁导致堵塞),从而造成两者状态不同步,我觉得对于错误应该要加上相应的处理机制,比如在界面提示你操作失败,或者自动重试。不过我现在已经不用SpiderKeeper了,而是改用celery+celery-beat来管理定时任务 |
碰到同样的问题了,定时任务有时不能正常启动 |
试试去,看到1.2支持定制任务了Timer Tasks |
你解决了吗?你是怎么解决的 |
不用spiderkeeper,用了scrapydweb。spiderkeeper这个项目作者不维护了,任务一多sqlite锁死 |
前一阵子发现定时任务有时候没有按计划来执行,仔细检查程序输出日志,发现报错如下:
一开始我还以为是Project.query.all()出错,仔细一看原来是同一个事务中的前一条用于插入的sql语句出错了。因为错误输出中没有指明出错的代码位置,我猜测这条sql语句是对应sqlalchemy里的session.add语句。最终定位到原因可能在文件/SpiderKeeper/app/proxy/contrib/scrapy.py中,开启爬虫任务的方法start_spider有可能会返回空值,而sqlite里sk_job_execution表的service_job_execution_id字段又有非空约束。
我的SpiderKeeper和Scrapyd部署在同一台机器的不同docker上,Scrapyd上部署了十来只爬虫。Scrapyd上也没有运行定时任务的记录,看来问题在于SpiderKeeper请求Scrapyd开始任务这一步没有成功。也许是网络问题,也许是Scrapyd本身的问题,不知道有没有人遇到和我一样的情况?另外为了提高定时任务的容错性,能否把start_spider方法改为类似于下面的形式:
或许还能加上一个可配置的最大重试次数?
The text was updated successfully, but these errors were encountered: