【发布时间】:2016-06-24 23:35:34
【问题描述】:
我正在使用 cron 运行一个 scrapy 蜘蛛,但它会引发 ImportError 异常:
Traceback (most recent call last):
File "/Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py", line 2, in <module>
import scrapy
File "/Library/Python/2.7/site-packages/scrapy/__init__.py", line 48, in <module>
from scrapy.spiders import Spider
File "/Library/Python/2.7/site-packages/scrapy/spiders/__init__.py", line 10, in <module>
from scrapy.http import Request
File "/Library/Python/2.7/site-packages/scrapy/http/__init__.py", line 12, in <module>
from scrapy.http.request.rpc import XmlRpcRequest
File "/Library/Python/2.7/site-packages/scrapy/http/request/rpc.py", line 7, in <module>
from six.moves import xmlrpc_client as xmlrpclib
ImportError: cannot import name xmlrpc_client
奇怪的是,当我运行 cron 正在运行的脚本时,它运行良好。
cron设置为
* * * * * sh /Users/som/sh/hm_scraping.sh
脚本是
#!/bin/bash
python /Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py
我正在使用此处描述的 CrawlerProcess 类:http://doc.scrapy.org/en/latest/topics/practices.html
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
process.crawl(HmSpider)
process.start()
================================================ =
编辑
基于 MuhammadTahir 和 lapinkoira cmets,我直接在终端中测试了以下内容:
/usr/bin/python /Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py
和
sudo -u som /usr/bin/python /Users/som/scrapy_testing/scrapy_testing/spiders/hm_spiders.py
第一个运行良好,但是当我使用 sudo 时(我也没有设置用户就运行了),它返回了同样的问题。也许 cron 在后台使用 sudo。
有什么想法吗??
谢谢!
【问题讨论】:
-
你使用 virtualenv 吗?哪个用户运行 cron,哪个用户运行脚本?
-
在
hm_scraping.sh中使用python二进制文件的完整路径(/usr/bin/python或/path/to/venv/python)而不是仅使用python应该可以解决它。 -
@MuhammadTahir,没用。
-
@lapinkoira,我猜是“som”。我运行
sudo crontab -u som -e并且设置在那里,当我运行sudo crontab -u root -e时它是空的。它还会向 /var/mail/som 发送一封“电子邮件”。 -
您是否尝试过以 som 的用户身份手动运行脚本?比如 su - som -c "执行脚本"
标签: python python-2.7 cron scrapy