You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本Shell执行遇HTTP 404错误,命令行运行正常

问题:Cron执行Shell脚本调用Python时触发HTTP 404错误,手动运行正常

背景

需要通过cronjob每小时执行Shell脚本,调用Python脚本提取数据库每日新增数据。但Shell脚本通过Cron运行时出现HTTP 404错误,直接用Python命令行运行该脚本却能正常获取数据。已确认两种运行方式使用的Python版本一致,且排除了“当前日期未结束导致查找未发生时段数据”的可能。

错误日志

for i in '${madis_sources}'
++ python /Users/estrobach/Python_Scripts/Urban_Evaluations/madisData.py  
acarsProfiles
*2024-07-18 2024-07-19 -80 -74 37 43 False
2024-07-18 00:00:00
/Users/estrobach/Data/acarsProfiles/
point
acarsProfiles
False*
Traceback (most recent call last):
  File "/Users/estrobach/Python_Scripts/Urban_Evaluations/madisData.py", line 25, in <module>
    dat=madisImport(Date,database,Type,source,archive)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 21, in madisImport
  File "/opt/anaconda3/lib/python3.11/urllib/request.py", line 241, in urlretrieve
    with contextlib.closing(urlopen(url, data)) as fp:
                            ^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.11/urllib/request.py", line 216, in urlopen
    return opener.open(url, data, timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.11/urllib/request.py", line 525, in open
    response = meth(req, response)
               ^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.11/urllib/request.py", line 634, in http_response
    response = self.parent.error(
               ^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.11/urllib/request.py", line 563, in error
    return self._call_chain(*args)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.11/urllib/request.py", line 496, in _call_chain
    result = func(*args)
             ^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.11/urllib/request.py", line 643, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

错误定位

错误触发于madisData.py第25行的dat=madisImport(Date,database,Type,source,archive)调用,对应madisImport.py第21行的urllib.request.urlretrieve(f, DataDump + fname)代码,是目标URL返回404未找到。

排查方向

  • 环境变量差异:Cron运行环境和用户登录环境的环境变量可能不同,在Shell脚本开头添加printenv输出所有环境变量,对比手动运行时的环境,检查脚本依赖的变量(如数据源配置、路径变量)是否在Cron环境中正确设置。
  • 路径一致性:脚本中若使用相对路径,Cron的工作目录可能与手动运行时不同,导致路径解析错误。统一使用绝对路径(包括Python脚本路径、数据存储路径等),避免工作目录差异带来的问题。
  • URL生成校验:在urllib.request.urlretrieve之前添加日志,打印实际请求的URLf,对比手动运行和Cron运行时生成的URL是否完全一致。有可能是Cron环境下日期/时间变量的格式或取值异常,导致生成了不存在的资源URL。
  • 网络权限检查:部分系统中Cron的网络访问权限受限制,检查防火墙、代理设置是否与用户登录环境一致,确认Cron环境能否正常访问目标数据源地址。

内容的提问来源于stack exchange,提问作者user23826167

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:26:20