El scheduler SGE permite definir dependencia entre jobs. Este permite, por ejemplo, determinar que un job B iniciara únicamente cuando el job A acabara. Es útil cuando hay dependencia de los resultados. La dependencia no esta limitada a un solo job, puede ser una lista de jobs.
Regresando al ejemplo anterior del Job Array con blastx, se podría imaginar que la lista de las secuencias sea el resultado de un proceso anterior. El script siguiente, aunque muy simple, sirve como base para dividir las secuencias y genera la lista. En caso real, el flujo de los datos podría ser mucho más complejo..
#!/bin/bash #$ -n SplitFile # el archivo original de 100 secuencias sera dividido en 100 archivos.. rm -rfv Split mkdir Split cd Split seqretsplit -auto -sequence $HOME/archivoOriginal.fna # Generamos la lista cd find $HOME/Split -name "*.fasta" > $HOME/lista-secuencias.txt |
Este script se lanzara primero. Se tomara en cuenta su numero de JOBID. Y se mandara luego el jobs de Blast, con la condición de dependencia, utilizando la opción -hold_jid.
$ qsub split.sh Your job 63 ("SplitFile") has been submitted $ qsub -hold_jid 63 blastarray.sh Your job-array 64.1-100:1 ("ArrayBlast") has been submitted $ qstat job-ID prior name user state submit/start at queue slots ja-task-ID ----------------------------------------------------------------------------------------------------------------- 63 0.55500 SplitFile jerome qw 02/17/2016 19:14:51 1 64 0.00000 ArrayBlast jerome hqw 02/17/2016 19:15:06 1 1-100:1 |
El job 64 tiene un estado hqw. El "h" significa que esta Hold, en espera de ser liberado. En este caso, sera cuando el job 63 acabe.
![]() | Es importante notar que si el job 63 falla o esta cancelado, el job 64 entrara para correr. Se debe de implementar un sistema de verificación dentro de los jobs con dependencia. |