启动独立的作业步骤并跟踪最高退出代码
Start independent job steps and keep track of highest exit code
我想启动许多独立任务(作业步骤)作为一项作业的一部分,并想跟踪所有这些任务的最高退出代码。
受到的启发,我目前正在做类似
的事情
#SBATCH stuf....
for i in {1..3}; do
srun -n 1 ./myprog ${i} >& task${i}.log &
done
wait
在我的 jobs.sh
中,我 sbatch
开始我的任务。
如何定义一个变量 exitcode
,在等待命令之后,它包含所有任务中最高的退出代码?
在此先致谢!
您可以将作业的 pid 存储在一个数组中并等待每个 pid,就像这样
#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
在这种情况下,您可以并行使用 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 }' jobs.log | sort -n | tail -1
我想启动许多独立任务(作业步骤)作为一项作业的一部分,并想跟踪所有这些任务的最高退出代码。
受到
#SBATCH stuf....
for i in {1..3}; do
srun -n 1 ./myprog ${i} >& task${i}.log &
done
wait
在我的 jobs.sh
中,我 sbatch
开始我的任务。
如何定义一个变量 exitcode
,在等待命令之后,它包含所有任务中最高的退出代码?
在此先致谢!
您可以将作业的 pid 存储在一个数组中并等待每个 pid,就像这样
#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
在这种情况下,您可以并行使用 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 }' jobs.log | sort -n | tail -1