【问题标题】:python script is not executed via crontabpython脚本不是通过crontab执行的
【发布时间】:2015-10-14 16:04:22
【问题描述】:

我有一个 python 脚本 test.py(仅供参考,它包含一些爬取逻辑) 并希望它每分钟执行一次。

所以我写了一个shell脚本weekjob.sh(下面都试过了)

python /path/test.py
/usr/bin/python /path/test.py
cd /path && /usr/bin/python test.py

然后注册一个工作

* * * * * /bin/sh /path/weekjob.sh

但是python没有执行。

当我像 sh weekjob.sh 这样执行 shell 脚本时 它工作得很好。当我将 weekjob.sh 的内容更改为 mkdir something 时,cronjob 也运行良好。

我的 python cron 作业出了什么问题?

(操作系统是centOS)

【问题讨论】:

标签: python shell cron


【解决方案1】:

而不是做

* * * * * /bin/sh /path/weekjob.sh 

你为什么不像这样删除/bin/sh

* * * * * /path/weekjob.sh 

首先确保该脚本是可执行的:

chmod +x /path/weekjob.sh

【讨论】:

  • 我已经这样做了.. shell 脚本实际上一直在运行。我在/var/log/cron 上查过了
  • 虽然这是一个合理的建议,但它对诊断或解决问题中的实际问题没有任何帮助。更进一步,只调用 Python 脚本的 shell 脚本也是完全多余的。
  • 请分享你的python脚本的内容,我想我们可能需要在那里寻找诊断。
  • @WillemM 正如你所说,python 脚本有一些缺陷。 Python脚本是关于从一些需要身份验证的网站爬取数据。这不是身份验证的问题,因为我设置了 id 和 pwd 来进行身份验证。
【解决方案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 是包含代理设置的文件。

【讨论】:

  • crontab 执行的脚本与你在命令行运行的脚本环境不同。
  • @WillemM Ah.. 我应该找到更多关于 crontab 的信息..!谢谢你,M。
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2017-02-05
  • 2020-03-16
  • 1970-01-01
  • 2014-05-03
  • 2012-09-14
  • 1970-01-01
相关资源
最近更新 更多