代码之家  ›  专栏  ›  技术社区  ›  carstenbauer

启动独立的作业步骤并跟踪最高退出代码

  •  2
  • carstenbauer  · 技术社区  · 6 年前

    我想启动许多独立的任务(作业步骤)作为一个作业的一部分,并希望跟踪所有这些任务的最高退出代码。

    灵感来自 this question

    #SBATCH stuf....
    
    for i in {1..3}; do
        srun -n 1 ./myprog ${i} >& task${i}.log &
    done
    
    wait
    

    在我的 jobs.sh sbatch ,开始我的任务。

    如何定义变量 exitcode

    提前多谢了!

    2 回复  |  直到 6 年前
        1
  •  2
  •   oguz ismail FCulig    6 年前

    #SBATCH stuf....
    
    for i in {1..3}; do
        srun -n 1 ./myprog ${i} >& task${i}.log &
        pids+=($!)
    done
    
    for pid in ${pids[@]}; do
        wait $pid
        exitcode=$[$? > exitcode ? $? : exitcode]
    done
    
    echo $exitcode
    
        2
  •  2
  •   damienfrancois    6 年前

    在这种情况下,您可以利用GNU并行优势:

    #SBATCH stuf....
    
    parallel --joblog ./jobs.log -P 3 "srun -n1 --exclusive ./myprog {} >& task{}.log " ::: {1..3}
    

    这将运行 srun ./mprog 分别使用参数1、2和3执行三次,并将输出重定向到三个文件名 task1.log task2.log task3.log ,就像你的 for -是的。

    --joblog 选项,它将进一步创建一个文件 jobs.log 它将包含有关每个运行的一些信息,其中包括第7列中的退出代码。然后可以使用

    awk 'NR>1 {print $7}' jobs.log | sort -n | tail -1