国内 Linux 集群服务器网络差无法 Git Clone 大项目的解决办法

本文介绍了在Linux集群中,由于GitHub服务器在国外导致的网络问题,作者编写了一个循环脚本,持续尝试gitclone大型repo如GATK,直到成功。通过Slurm调度,脚本运行40次后克隆成功,然后可以继续使用gradle。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GitHub 是一个软件源代码托管服务平台,Linux 上使用的大部分工具都可以在上面获得。

但是由于 GitHub 的服务器在国外,国内访问经常出现网络问题导致访问失败,尤其是使用 git clone 对 repo 进行克隆的时候,会经常出现因网络问题而克隆失败。

Linux 集群服务器的用户,在比较难实现科学上网的前提下,对大型 repo 克隆的任务显得尤为困难,而且想使用 gradle build 的话,git clone 似乎是唯一选择。

既然 git clone 一两次不成功,那我就想办法让他 clone 到成功为止,于是我就写了一个循环脚本,将它投递到计算节点上 24h 运行,直到它克隆成功才结束任务。

以克隆 GATK (repo 大小约 300mb)为例,脚本如下:

#!/bin/bash
#SBATCH --job-name=GitClone		#任务名称
#SBATCH --nodelist=litchi-0-1	#计算节点名称
#SBATCH --partition=WHEEL		#使用 WHEEL 用户组
#SBATCH --nodes=1				#使用计算节点数量
#SBATCH --ntasks=1				#使用 1 个线程
#SBATCH --mail-type=end			#任务结束时发送邮件
#SBATCH --mail-user=***@qq.com  #邮箱地址
#SBATCH --output=/home/$USER/Slurm_JobLogs/JobLog_%j_%x.log		#标准输出保存路径
#SBATCH --error=/home/$USER/Slurm_JobLogs/JobLog_%j_%x.err		#标准错误保存路径
#------------------------------------------------------------
# PRINT JOB'S INFORMATION
  source /home/$USER/.bashrc
  threads=$SLURM_NTASKS
  echo "## Job:[$SLURM_JOB_NAME]"
  echo "## Node:[$SLURM_NODELIST]"
  echo "## CPUs:[$SLURM_NTASKS]"
  echo "## Mem:[$SLURM_MEM_PER_NODE]"
  echo `date`
  echo -e $(printf -- "-%.0s" {1..100})"\n" #cut-off-line
#------------------------------------------------------------
# PATH
  repo_url="https://github.com/broadinstitute/gatk.git"
  repo_name="gatk"
#------------------------------------------------------------
# SHELL
  cd /home/$USER/Accessories/Softwares
  while true; do				#循环执行任务
    git clone $repo_url			#执行 git clone
    if [ $? -eq 0 ]; then		#如果以上命令的退出码等于 0 (任务成功)
      echo "Git clone successful!"
      break						#则退出循环
    else						#如果命令的退出码不等于 0 (任务失败)
      echo "Git clone failed:( Retrying..."
      rm -rf ./${repo_name}		#则删除这个repo
      sleep 1					#睡眠 1 秒缓冲一下继续循环
    fi
  done
#------------------------------------------------------------
# JOB ENDS
  echo -e $(printf -- "-%.0s" {1..100}) #cut-off-line
  echo "## Runtime:[`sacct -j $SLURM_JOB_ID --format=Elapsed --noheader | awk '{print $1}' | sed -n '2p'`]"

这个脚本的路径为 ~/Scripts/GitClone_GATK.sh

将任务投递到计算节点运行:

sbatch ~/Scripts/GitClone_GATK.sh

最终,这个任务运行了 40 次,历时 13h,终于是克隆成功了!

在这里插入图片描述
接下来就可以愉快地使用 gradle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值