赞
踩
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
了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。