qsub -hold_jid -afterok loop não iniciando

2

Estou tentando executar uma série de tarefas enviadas ao cluster, uma após a outra, enviando o seguinte script .sh:

Annotation_Loop.sh:

#!/bin/bash

job='qsub run_IntersectBed_1.sh 0'
for i in {1..3}
do
    job_next='qsub -hold_jid $job run_IntersectBed_1.sh $i'
    job=$job_next
done

O primeiro trabalho (antes de entrar no loop) é executado, mas os próximos nunca são iniciados.

Eu acho que o roteiro está bem escrito. Eu mudo o modo para um executável e o executo como

nohup ./Annotation_Loop.sh (acho que isso é necessário?) ... mas o resto nunca é feito.

Eu tentei -W antes, usando -W depend=afterok:$job no lugar de -hold_jid $job

#!/bin/bash

    job='qsub run_IntersectBed_1.sh 0'
    for i in {1..3}
    do
        job_next='qsub -W depend=afterok:$job run_IntersectBed_1.sh $i'
        job=$job_next
    done

Mas retornou unknown option -W .

O que poderia dar errado? : (

    
por Carmen Sandoval 30.04.2013 / 20:37

2 respostas

1

A saída do qsub tem o jobid dentro de um texto de mensagem. No meu caso:

$ qsub hello.sh
Your job 8845476 ("hello.sh") has been submitted

Você deve extrair o jobid desta mensagem. Por exemplo:

$ jobid=$(qsub hello.sh | cut -d' ' -f3)
$ echo $jobid
8845481

Talvez a sua versão do qsub tenha uma mensagem diferente, experimente-a separadamente e, em seguida, coloque um recorte para obter o jobid como uma string.

    
por 30.04.2013 / 21:46
0

Para quem tropeçar nos anos seguintes:

Eu usaria um trabalho de matriz para evitar escrever um shell roteiro. Você precisa de algo como run_IntersectBed_1.sh $SGE_TASK_ID e precisa enviar com qsub -t 1-3 -tc 1 Annotation_Loop.sh

Isso cria uma matriz de 3 tarefas, numeradas 1, 2 e 3, que são executadas uma por vez ( -tc 1 ). Você não precisa mais se preocupar com hold_jid .

SGE_TASK_ID é onde o ID inteiro do trabalho atual é mantido. É isso que você passa para o seu código (equivalente a i no seu loop).

    
por 10.07.2015 / 21:58