Domanda

come posso parametrizzare uno script di shell che viene eseguito su una griglia (iniziato con QSUB)? Ho uno script di shell, dove io uso getopts per leggere i parametri.

Quando inizio (QSUB script.sh -r -s firstparam secondparam ..) questo script di lavoro con QSUB ricevo messaggi di errore,

  

QSUB: opzione non valida - s

     

QSUB: valore -r illegale

come QSUB pensa il parametro sono per sé. Eppure non ho trovato alcuna soluzione.

Grazie

È stato utile?

Soluzione 3

Ho appena capito come risolverlo: basta stampare i comandi del The Script shell con echo e tubo il risultato a qsub:

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

Altri suggerimenti

Utilizzando l'opzione -v QSUB è il modo corretto:

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

par_name può essere utilizzata come variabile nello script shell.

In aggiunta alla risposta di Volk, al fine di fare riferimento alle variabili nella lista (designato dal -v) è sufficiente utilizzare il nome si definisce nella vostra chiamata. Quindi, diciamo che ha fatto una chiamata a QSUB come segue

qsub -v foo='qux' myRunScript.sh

Poi myRunScript.sh potrebbe essere simile a questa:

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

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

Se il risultato sarebbe

qux

Spero che questo aiuti!

C'è un modo migliore ...

Sono davvero sorpreso di quanto tempo questa domanda è andato senza una buona risposta. Può essere che la versione specifica di qsub non è stato specificato. qsub esiste in almeno di coppia e anche Sun Grid Engine, forse altre utilità di pianificazione. Quindi, è importante sapere che si sta utilizzando. Parlerò di alcuni qui:

COPPIA: qsub -F <arguments> command

pagina man
Ecco un esempio di come io di solito uso. A partire da questo script di esempio che ha appena riprende tutti gli argomenti passati ad esso:

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

echo $@

I presenterà il lavoro in questo modo:

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

E questo è ciò che l'aspetto del file di output come dopo l'esecuzione:

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

Sun Grid Engine: qsub command [ command_args ]


Si aggiunge solo gli argomenti dopo il comando, proprio come si farebbe quando si esegue nella shell. Non ho SGE correre da nessuna parte, in modo che nessun esempio per questo. Ma è la stessa cosa con Slurm, che è al di sotto

Slurm: sbatch command [ command_args ]


Qui presento lo stesso script che ho usato con l'esempio della coppia di cui sopra:

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

E i risultati:

$ cat slurm-104331.out
what the heck

Esportazione variabili d'ambiente! = Passaggio di argomenti

L'esportazione variabili d'ambiente è molto diverso da passare gli argomenti ad un comando.
Ecco una buona discussione sulle differenze.

Le risposte qsub soprattutto raccomandano -v. Per essere chiari, le variabili di ambiente esportazioni -v, -F passa gli argomenti al comando.

Io in genere preferiscono parametrizzare i miei script, consentendo per argomenti. In realtà, io direi che è molto più comune di utilizzare degli script come questo process_data.sh --threads 8 di fare qualcosa di simile export THREADS=8; process_data.sh.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top