在bash上重复执行命令,直到满足条件为止

问题描述 投票:0回答:1

我有权访问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循环,这与预期相反。

bash parallel-processing qsub
1个回答
2
投票

我让它像这样工作:

#!/bin/bash
n=1
while [ $n -gt 0 ]; do 
    if [ $(qstat -u username | grep 'Q' | wc -l) -gt 1 ]; then 
        echo "Jobs in Queue=$(($(qstat -u username | grep 'Q' | wc -l)-1))"
    else 
        python parallel_jobs.py
        sleep 180
        n=$(($(qstat -u username | grep 'Q' | wc -l)-1))
    fi
done
© www.soinside.com 2019 - 2024. All rights reserved.