Shell脚本经sbatch提交后wget出现连接拒绝问题求助
问题
需要下载多个30GB以上的文件,编写了Shell脚本:
#!/bin/bash WGETREF='https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/GRCh38_reference_genome/GRCh38_full_analysis_set_plus_decoy_hla.fa' wget $WGETREF chmod +x get-ref.sh
通过sbatch -A OD-projectID get-ref.sh提交脚本,但执行时出现连接拒绝错误:
Connecting to ftp.1000genomes.ebi.ac.uk (ftp.1000genomes.ebi.ac.uk)|193.62.193.140|:443... failed: Connection refused.
改用从文件读取URL的写法:
#!/bin/bash wget -i url-ref.txt
问题依旧。直接在命令行执行wget可以正常下载,在脚本wget前添加ping google.com能临时解决,但想找更合适的优化方案。
环境信息:
- Bash版本:GNU bash, version 4.4.23(1)-release (x86_64-suse-linux-gnu)
- wget调试输出:
DEBUG output created by Wget 1.20.3 on linux-gnu. Reading HSTS entries from /home/foa003/.wget-hsts URI encoding = ‘UTF-8’ asking libproxy about url 'https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/GRCh38_reference_genome/GRCh38_full_analysis_set_plus_decoy_hla.fa' libproxy suggest to use 'direct://' Converted file name 'GRCh38_full_analysis_set_plus_decoy_hla.fa' (UTF-8) -> 'GRCh38_full_analysis_set_plus_decoy_hla.fa' (UTF-8) --2023-05-18 11:36:52-- https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/GRCh38_reference_genome/GRCh38_full_analysis_set_plus_decoy_hla.fa Resolving ftp.1000genomes.ebi.ac.uk (ftp.1000genomes.ebi.ac.uk)... 193.62.193.140 Caching ftp.1000genomes.ebi.ac.uk => 193.62.193.140 Connecting to ftp.1000genomes.ebi.ac.uk (ftp.1000genomes.ebi.ac.uk)|193.62.193.140|:443... Closed fd 3 failed: Connection refused. Releasing 0x00005555558eb020 (new refcount 1).
优化方案
1. 强制刷新DNS解析+增强wget重试策略
替代ping的轻量方式,直接针对目标域名刷新DNS,同时给wget添加重试参数提升稳定性:
#!/bin/bash # 刷新目标域名DNS解析,丢弃输出 nslookup ftp.1000genomes.ebi.ac.uk > /dev/null 2>&1 # 连接被拒绝时自动重试,设置重试间隔和超时 wget --retry-connrefused --waitretry=5 --timeout=60 $WGETREF
2. 指定可靠DNS服务器下载
如果集群内置DNS解析存在异常,直接指定公共DNS服务器(如8.8.8.8):
#!/bin/bash wget --dns-servers=8.8.8.8 --retry-connrefused --waitretry=5 $WGETREF
3. 添加短延迟等待网络就绪
部分集群节点启动后网络未完全初始化,添加短延迟再执行下载:
#!/bin/bash sleep 10 wget --retry-connrefused --waitretry=5 $WGETREF
延迟时间可根据集群实际情况调整(5-30秒均可)。
4. 改用curl替代wget
curl的网络处理逻辑可能更适配集群环境,同时支持断点续传(适合大文件):
#!/bin/bash # -C - 启用断点续传,-O 保存为原文件名 curl -C - -O $WGETREF
内容的提问来源于stack exchange,提问作者Rachel
相关产品推荐
相关产品推荐

