Почему невозможно запустить wget с опцией background в скрипте slurm?

#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, позволяет загружать файлы по одному, а не одновременно.