parametr dla skryptów powłoki uruchamianych za pomocą qsub

Jak sparametryzować skrypt powłoki, który jest uruchamiany na siatce (zaczynającej się od qsub)? Mam skrypt powłoki, gdzie używam getopts do odczytu parametrów.

When I start (qsub script.sh -r firstparam-s secondparam ..) ten działający skrypt z qsub otrzymuję komunikaty o błędach,

Qsub: invalid option -- s

Qsub: illegal-r value

Ponieważ qsub uważa, że parametr jest dla siebie. Jeszcze nie znalazłem żadnych rozwiązanie.

Thanks

Author: Charles, 2010-08-17

4 answers

Użycie opcji qsub-v jest właściwym sposobem:

qsub -v par_name=par_value[,par_name=par_value...] script.sh

Par_name może być użyta jako zmienna w skrypcie powłoki.

 45
Author: volks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-19 10:07:38

Oprócz odpowiedzi Volka, aby odwołać się do zmiennych na liście (oznaczonych przez-v), po prostu używasz nazwy zdefiniowanej w wywołaniu. Tak więc, powiedzmy, że wykonałeś połączenie do qsub w następujący sposób

qsub -v foo='qux' myRunScript.sh

Wtedy myRunScript.sh może wyglądać mniej więcej tak:

#!/bin/bash
#PBS -l nodes=1:ppn=16,walltime=0:00:59
#PBS -l mem=62000mb
#PBS -m abe

bar=${foo}
echo "${bar}"

Gdzie wyjście byłoby

qux
Mam nadzieję, że to pomoże!
 36
Author: jhrf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 20:13:25

Właśnie wymyśliłem, jak to rozwiązać: po prostu wydrukuj polecenia scrip powłoki z echo i prześlij wynik do qsub:

echo "./script.sh var1=13 var2=24" | qsub

 22
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-21 10:31:51

Jest lepszy sposób...

Jestem naprawdę zaskoczony, jak długo to pytanie trwało bez dobrej odpowiedzi. Możliwe, że nie została określona konkretna wersja qsub. qsub istnieje przynajmniej w momencie obrotowym, a także w silniku słonecznym, być może w innych układach. Więc ważne jest, aby wiedzieć, którego używasz. Opowiem o kilku tutaj:

Moment obrotowy: qsub -F <arguments> command

Strona Man
Oto przykład, jak zwykle go używam. Zaczynając od tego przykładowego skryptu, który tylko echa wszelkie argumenty przekazane do niego:

$ cat testArgs.pbs
#!/usr/bin/env bash

echo $@

Chciałbym zgłosić pracę w ten sposób:

$ qsub -F "--here are the --args" testArgs.pbs
3883919.pnap-mgt1.cm.cluster

I tak wygląda plik wyjściowy po uruchomieniu:

$ cat testArgs.pbs.o3883919
--here are the --args

Sun Grid Engine: qsub command [ command_args ]

Strona Man
Po prostu dodajesz argumenty za poleceniem, tak samo jak podczas wykonywania w powłoce. Nigdzie nie mam SGE, więc nie ma przykładu dla tego. Ale tak samo jest z Slurm, który jest poniżej

Slurm: sbatch command [ command_args ]

Strona Man
Tutaj zamieszczam ten sam skrypt, którego użyłem z powyższym przykładem:

$ sbatch testArgs.sh what the heck
Submitted batch job 104331

I wyniki:

$ cat slurm-104331.out
what the heck

Eksportowanie zmiennych środowiskowych != przekazywanie argumentów

Eksportowanie zmiennych środowiskowych bardzo różni się od przekazywania argumentów do polecenia.
oto dobra dyskusja na temat różnic.

Odpowiedzi qsub przede wszystkim polecają -v. Żeby było jasne, -v eksportuje środowisko zmienne, -F przekazuje argumenty do polecenia.

Ogólnie wolę parametryzować moje Skrypty, pozwalając na argumenty. W rzeczywistości, powiedziałbym, że o wiele bardziej powszechne jest używanie skryptów takich jak ten process_data.sh --threads 8 niż robienie czegoś takiego jak export THREADS=8; process_data.sh.

 17
Author: calico_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 18:06:18