反复执行bash命令直到满足条件

时间:2020-01-27 03:25:37

标签: bash parallel-processing qsub

我有权访问100个节点。将作业提交给所有100个节点后,我想在180秒的睡眠时间后进行查​​询以找出队列中还有多少作业。如果队列中有一些作业,则bash上的输出将指示挂起的作业数。如果所有作业都开始在100个节点上运行,那么我想提交新作业,直到所有作业完成为止。当所有作业完成时,bash应该退出while循环。

我写了以下bash代码行

n=1
while [ $n -gt 0 ]; do 
    if (($(qselect -u username | grep 'Q' | wc -l) > 0)); then 
        echo "Jobs in Queue=$(qselect -u username | grep 'Q' | wc -l)"
    else 
        python parallel_jobs.py
        n=$(qselect -u username | grep 'Q' | wc -l)
    fi
    sleep 180
done

我发现bash仅在1次通过后退出while循环,这与预期相反。

1 个答案:

答案 0 :(得分:3)

我让它像这样工作:

#!/bin/bash
n=1
while [ $n -gt 0 ]; do 
    if [ $(qstat -u username | grep -c Q) -gt 1 ]; then 
        echo "Jobs in Queue=$(($(qstat -u username | grep -c Q)-1))"
    else 
        python parallel_jobs.py
        n=$(($(qstat -u username | grep -c Q)-1))
    fi
done