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

wget命令行执行正常但shell脚本运行报504超时怎么解决

问题原因与解决方案

产生原因

  • URL特殊字符被shell解析:你使用的URL中包含&符号,这是shell的内置元字符,作用是将前面的命令放到后台执行。如果没有给URL加引号包裹,脚本执行时会将&前的https://preprod.storyplayr.com/sitemap.xml?snapshots=true作为实际请求地址,后面的onlyBlog=true会被识别为独立的shell变量赋值语句,不会作为请求参数传递。缺失必要参数的请求会导致服务端处理逻辑异常,最终返回504超时。
    终端直接执行正常大概率是因为你使用的是zsh等支持URL自动转义的shell,会自动处理URL中的&符号,而脚本默认使用bash、dash等不具备该自动转义能力的shell解析,因此出现差异。
  • 执行环境网络配置不一致:交互式终端登录时会自动加载~/.bashrc、~/.profile等配置文件,如果你在终端配置了HTTP/HTTPS代理、自定义DNS等网络设置,非交互模式运行的脚本不会加载这些配置,导致网络链路不同,无法正常访问内测环境接口导致超时。
  • 执行用户权限差异:如果终端用个人用户执行命令,脚本用root、www-data等其他用户执行,部分系统的防火墙、访问控制策略会对不同用户的出站请求做限制,导致脚本的请求被拦截超时。

规避方案

  • 优先给URL添加引号包裹,避免shell解析特殊字符,修改后的命令如下:
    wget -P /home/storyplayr/storyplayr-web-playr -O sitemap.xml 'https://preprod.storyplayr.com/sitemap.xml?snapshots=true&onlyBlog=true' --no-check-certificate
    
  • 对齐脚本和终端的运行环境:可以在脚本开头添加source ~/.bashrc加载用户配置,或者使用bash -i 脚本名.sh的方式以交互式模式运行脚本,确保代理、环境变量和终端一致。也可以在脚本中添加echo $http_proxy $https_proxy输出相关环境变量,和终端的输出对比排查差异。
  • 确认脚本执行用户权限:如果是crontab等调度工具触发脚本执行,默认使用root用户运行,可以切换到对应用户手动执行脚本测试,或者调整对应用户的网络访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:36:05