Pregunta

¿cómo puedo parametrizar un script de shell que se ejecuta en una cuadrícula (iniciado con qsub)? Tengo un script de shell, donde uso getopts para leer los parámetros.

Cuando comienzo (qsub script.sh -r -s firstparam secondparam ..) este script de trabajo con qsub recibo mensajes de error,

  

qsub: opción no válida - s

     

qsub: valor -r ilegal

qsub como piensa el parámetro son por sí misma. Sin embargo, no he encontrado ninguna solución.

Gracias

¿Fue útil?

Solución 3

acabo descubierto la manera de resolverlo: acaba de imprimir las órdenes del scrip cáscara con el eco y el resultado tubería a qsub:

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

Otros consejos

El uso de la opción de la qsub -v es la forma correcta:

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

par_name se puede usar como variable en la secuencia de comandos shell.

Además de la respuesta de Volk, con el fin de hacer referencia a las variables de la lista (designado por -v) sólo tiene que utilizar el nombre que usted define en su llamada. Por lo tanto, digamos que usted ha hecho una llamada a qsub de la siguiente manera

qsub -v foo='qux' myRunScript.sh

A continuación, myRunScript.sh podría ser algo como esto:

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

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

Cuando la salida sería

qux

Espero que esto ayude!

Hay una mejor manera ...

Estoy muy sorprendido por cuánto tiempo esta cuestión ha ido sin una buena respuesta. Puede ser que la versión específica de qsub no se especificó. qsub existe en al menos par motor y también de Sun Grid Engine, tal vez otros programadores. Por lo tanto, es importante saber lo que usted está utilizando. Voy a hablar de unos pocos aquí:

PAR: qsub -F <arguments> command

página del manual
Aquí está un ejemplo de cómo normalmente lo uso. A partir de este script de ejemplo que se acaba se hace eco de los argumentos que se le pasan:

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

echo $@

Me presentaría el trabajo como este:

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

Y esto es lo que el archivo de salida parece después de que se ejecuta:

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

Sun Grid Engine: qsub command [ command_args ]


Usted sólo tiene que añadir los argumentos después del comando, al igual que lo haría cuando se ejecuta en la cáscara. No tengo SGE correr en cualquier lugar, por lo que ningún ejemplo para éste. Pero es lo mismo con Slurm, que está por debajo

Slurm: sbatch command [ command_args ]


Aquí presento la misma escritura que utilicé con el ejemplo anterior de par:

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

Y los resultados:

$ cat slurm-104331.out
what the heck

Exportación de variables de entorno! = Pasar argumentos

La exportación de variables de entorno es muy diferente de pasar argumentos a un comando.
Aquí es una buena discusión sobre las diferencias.

Las respuestas qsub sobre todo recomiendan -v. Para ser claros, las variables de entorno exportaciones -v, -F pasa argumentos para el comando.

Yo por lo general prefieren para parametrizar mis guiones permitiendo argumentos. De hecho, yo diría que es mucho más común el uso de secuencias de comandos como ésta process_data.sh --threads 8 que hacer algo como export THREADS=8; process_data.sh.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top