#bash #wget #slurm
#bash #wget #slurm
Вопрос:
Я использовал этот скрипт для загрузки файлов. Без -b
wget
этого загружайте файлы один за другим. У -b
меня есть возможность загружать файлы в фоновом режиме, но также и одновременно. К сожалению, скрипт не работает в SLURM. Он работает только без -b
in Slurm.
Скрипт для загрузки файлов
#!/bin/bash
mkdir data
cd data
for i in 11 08 15 26 ;
do
wget -c -b -q ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR116/0${i}/SRR116802${i}/SRR116802${i}_1.fastq.gz
wget -c -b -q ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR116/0${i}/SRR116802${i}/SRR116802${i}_2.fastq.gz
done
cd ..
Скрипт Slurm
#!/bin/bash
#SBATCH --job-name=mytestjob # create a short name for your job
#SBATCH --nodes=2 # node count
#SBATCH --ntasks=2 # total number of tasks across all nodes
#SBATCH --cpus-per-task=2 # cpu-cores per task (>1 if multi-threaded tasks)
#SBATCH --mem-per-cpu=4G # memory per cpu-core (4G is default
#SBATCH --time=10:01:00 # total run time limit (HH:MM:SS)
#SBATCH --array=1-2 # job array with index values 1, 2
#Execution
bash download.sh
На терминале: sbatch slurmsript.sh
(Это не работает) no jobid
Комментарии:
1. @Rachid K. Спасибо за редактирование текста markdown.
2. Почему бы не использовать
wget -cq <url> amp;
для запуска каждойwget
команды в фоновом режиме?3. Я попробовал это решение, в данном случае у меня было два файла одновременно, но не все файлы одновременно, я имею в виду, что у меня было выполнение двух
wget
, но для одного item.exp SRR….215_1.fastq.gz и SRR…215_2.fastq.gz без SRR208, SRR211 и т.д.4. Любая ошибка при отправке задания с помощью sbatch? Или какие-либо другие ошибки в любой момент?
5. Нет, никакой ошибки.
Ответ №1:
Вы можете загружать несколько файлов одновременно с curl
помощью .
В вашем случае это должно сработать:
# Create an empty bash array of urls.
urls=()
# Add each url to the array, such that '-O' and the url are separate
# items in the array. This is necessary so that the curl command will
# look like 'curl -O <url1> -O <url2> ...', since the -O command must
# be provided for each url.
for i in 11 08 15 16; do
urls =( "-O" "ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR116/0${i}/SRR116802${i}/SRR116802${i}_1.fastq.gz" )
urls =( "-O" "ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR116/0${i}/SRR116802${i}/SRR116802${i}_2.fastq.gz" )
done
# Simultaneously download from all urls.
curl --silent -C - "${urls[@]}"
Чтобы объяснить каждый из curl
вариантов:
--silent
является эквивалентомwget
‘s-q
. Отключаетcurl
индикатор выполнения.-C -
является эквивалентомwget
‘s-c
. Он сообщаетcurl
, чтобы автоматически узнать, где / как возобновить передачу.-O
указываетcurl
записать выходные данные в файл с тем же именем, что и удаленный файл (это поведениеwget
). Это должно быть указано для каждого URL.
В качестве альтернативы, вы можете рассмотреть возможность установки и использования aria2
.
Комментарии:
1. Спасибо вам за это предложение, но, к сожалению, этот скрипт, работающий с slurm, позволяет загружать файлы по одному, а не одновременно.