¿Alguien puede decirme la diferencia entre las siguientes formas de enviar un script:
$ qsub script_name.sh
y
./script_name.sh
¿Cuáles son las diferencias entre las dos formas anteriores de enviar un trabajo a un clúster?
Además, ¿cómo es que a veces necesito escribir:
$ chmod +x script_name.sh
… antes de poder escribir ./script_name.sh
enviar un trabajo? ¿Por qué a veces solo necesito escribir qsub script_name.sh
?
Lo siento, no estoy muy familiarizado con Unix.
Comentarios
- ¿Qué es qsub? _
- @HaukeLaging: vea mi respuesta.
Respuesta
¿Utiliza un clúster de cálculo?
Ya que estás preguntando acerca de qsub
, voy a asumir que estás usando GridEngine o algo de producto de agrupación en clústeres de computadoras .
qsub
Cuando ejecuta el comando qsub script_name.sh
le está diciendo al nodo principal del clúster que desea enviar un script para que se ejecute en ese servidor. De modo que ese servidor necesitaría tener acceso a los mismos sistemas de archivos que contienen el script. Por ejemplo, si su script vive aquí, /home/myusername/script_name.sh
, este archivo debería ser accesible en ambos computadora en la que «está ejecutando el comando qsub
, así como cualquier nodo en su clúster donde pretenda script_name.sh
que se ejecute.
Ejecución de un script
Cuando ejecuta el script, ./script_name.sh
no está ejecutando nada en el clúster. Está ejecutando este script localmente en su sistema. Si ha utilizado un comando para obtener un shell en el clúster, qsh
, entonces está ejecutando este comando en cualquier nodo que el nodo del programador del clúster haya decidido darle un shell. en.
Permisos
Cada vez que crea un script y tiene la intención de ejecutarlo, debe comunicarle al sistema sus intenciones, cambiando los permisos del script de modo que reflejen que el archivo es ejecutable. De lo contrario, el archivo no es un script, sino solo un archivo de texto.
Puede ver los permisos de un archivo así:
algún script
$ cat script_name.sh #!/bin/bash echo "hello world"
no ejecutable
$ ls -l script_name.sh -rw-rw-r--. 1 saml saml 32 Feb 25 18:11 script_name.sh $ ./script_name.sh bash: ./script_name.sh: Permission denied
ejecutable
$ chmod +x script_name.sh $ ls -l script_name.sh -rwxrwxr-x. 1 saml saml 32 Feb 25 18:11 script_name.sh $ ./script_name.sh hello world
Comentarios
- Hola slm, gracias por tu respuesta. Pero estoy un poco confundido acerca de lo que significa cuando dices " Si ' has usado un comando para obtener un shell en el clúster , qsh, entonces ' está ejecutando este comando en cualquier nodo en el que el nodo del programador ' del clúster haya decidido darle un shell. "
- @john_w: ¿qué tecnología de agrupación está usando aquí? GridEngine o algo más?
- Hola, lo siento, no estoy seguro de lo que significa la tecnología de agrupación en clústeres, soy extremadamente novato. Sé que tengo un archivo bashrc. ¿Cómo averiguo el GridEngine? ¿Escribo algún comando en la línea de comandos para averiguarlo?
- También tengo un script que requiere otro script. El script start_prephasing.sh llama a prephasing.sh usando un bucle en start_prephasing.sh. Estaba usando qsub para enviar star_prephasing.sh, pero recibo el error de " / var / spool / n1ge / cn-r10-7 / job_scripts / 4304571: línea 9: qsub: comando no encontrado ". Pero cuando escribo chmod + x start_prephasing.sh y luego los 22 trabajos de prephasing.sh se ejecutarán correctamente. No estoy seguro de por qué, creo que todavía ' no entiendo completamente la diferencia entre qsub start_prephasing.sh y ./start_prephasing.sh todavía.
- Esto es lo que tengo en el script start_prephasing.sh: # $ -S / bin / bash # $ -cwd export HOME = / adp / home / hswong / CACTI / imputation / prephasing let a = 1 b = 22 while [$ a -le $ b] do qsub -q long.q -o ~ / queue -e ~ / queue prephasing.sh $ a #qsub -pe paralelo 4 -q paralelo_long.q -o ~ / queue -e ~ / queue prephasing.sh $ a deje a = $ a + 1 hecho