Ubuntu上的Python SSLError,但仅限于从CRON运行时

问题描述 投票:2回答:1

我有一个使用请求模块的Python脚本。它适用于我的桌面(Windows),当我在我的VM上手动运行它时(Ubuntu 14.04 / python 2.7.14)。但是,当完全相同的命令被安排为同一VM上的CRON作业时,它就会失败。

违规线似乎是:

index_response = requests.get(my_https_URL, verify=False)

(略微编辑)响应是:

(<class 'requests.exceptions.SSLError'>, SSLError(MaxRetryError("HTTPSConnectionPool(host=my_https_URL, port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '_ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure'),))",),), <traceback object at 0x7f3d877ce5f0>)

HTTP URL似乎没有受到影响,实际上一些HTTPS URL正在工作......(我认为它的域名需要SNI才能正常工作)。

我尝试添加verify=False,甚至将CRON脚本作为sudo运行,但没有更新。它在我手动运行时最初失败了,但我安装了python2.7.14(除了python 2.7.6),这解决了手动问题。为了增加一些复杂性,脚本由另一个使用exec触发(测试运行器运行各种测试脚本,包括这个) - 这可能是相关的吗?

我在urllib2中没有这个问题,但如果我可以帮助它,我宁愿不从请求转回到urllib2 ......

python ubuntu cron sni
1个回答
2
投票

我现在可以更好地格式化这里作为答案:

如果可能是cron只是选择了错误的解释器。一个简单的解决方案是提供它的完整路径,您可以通过以下方式找到它:

md@gw1:~$ type python2.7
python2.7 is /usr/bin/python2.7
md@gw1:~$

现在在crontab中使用:

0 12 * * * /usr/bin/python2.7 your_script.py

或者使用所谓的shebang:

md@gw1:~$ cat your_script.py
#!/usr/bin/python2.7

print "hello"

md@gw1:~$ chmod +x your_script.py
md@gw1:~$ ./your_script.py
hello
md@gw1:~$

your_script.py中的第一行和chmod使它成为可执行的,并将使用正确的解释器。

© www.soinside.com 2019 - 2024. All rights reserved.