我有一个python脚本test.py(fyi,它包含一些爬行逻辑) 并希望它每隔一分钟执行一次。
所以我写了一个shell脚本weekjob.sh(在下面尝试了每一个)
<?php
//.. get $usercsvdata and $devicecsvdata
$this->load->library('zip');
$this->zip->add_data('users.csv', $usercsvdata);
$this->zip->add_data('devices.csv', $devicecsvdata);
$this->zip->download($user_file_name);
然后注册一份工作
python /path/test.py
/usr/bin/python /path/test.py
cd /path && /usr/bin/python test.py
但是没有执行python。
当我执行像* * * * * /bin/sh /path/weekjob.sh
这样的shell脚本时
它运作得很好。当我将weekjob.sh的内容更改为sh weekjob.sh
时,cronjob也运行良好。
我的python cron作业出了什么问题?
(OS是centOS)
答案 0 :(得分:2)
我找到了答案。 这是代理问题。 cronlog显示以下错误。
Traceback (most recent call last):
File "/home/deploy/crawlingScript/proxyTest.py", line 41, in <module>
converter = xml2csv(new_url, username, password, output_file_name, encoding="utf-8")
File "/home/deploy/crawlingScript/converterOld.py", line 13, in __init__
response = urllib2.urlopen(request)
File "/usr/lib64/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib64/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib64/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib64/python2.6/urllib2.py", line 1190, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib64/python2.6/urllib2.py", line 1165, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 110] Connection timed out>
我在.bashrc
中设置了代理,但我认为cron有一些问题。
所以,我刚刚在.py文件中添加了一些代理代码。
并且通过@WillemM找到了另一个解决方案
* * * * * . /path/.bashrc; /bin/sh /path/to/sh/test.sh
.bashrc是包含代理设置的文件。
答案 1 :(得分:-1)
而不是做
* * * * * /bin/sh /path/weekjob.sh
为什么不放弃这样的/bin/sh
:
* * * * * /path/weekjob.sh
首先确保该脚本是可执行的:
chmod +x /path/weekjob.sh