Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash上重复命令,直到满足条件_Bash_Parallel Processing_Qsub - Fatal编程技术网

在bash上重复命令,直到满足条件

在bash上重复命令,直到满足条件,bash,parallel-processing,qsub,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) &g

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

我让它这样工作:

#!/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

我让它像这样工作:

#!/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

在python parallel_jobs.py步骤之后,也许我应该在评估n之前等待一段时间?好吧,grep有一个-c选项,顺便说一下,你可以像grep-c一样做,为什么你要浪费近100-stillBusy*180[CPU*seconds]甚至更多,如果python在节点上使用所有CPU核进行处理,而不是HPC级完全管理的处理工作流-节点可以在完成前一个作业包单元的瞬间自动请求并重新获取另一个作业包单元?重新激活,~180[s]延迟批处理重新恢复仍在100个HPC节点的工厂中等待处理的作业包似乎不是一件合法的事情,HPC基础设施效率驱动的工作实践流程越少,是吗?我同意你的评估,没有必要使用延迟。在步骤python parallel_jobs.py之后,也许我应该等一段时间再评估n?顺便说一句,grep有一个-c选项,你可以像grep-c一样做,为什么你要浪费100-stillBusy*180[CPU*秒]甚至更多,如果python在节点上使用所有CPU核进行处理,而不是HPC级完全管理的处理工作流-节点可以在完成前一个作业包单元的瞬间自动请求并重新获取另一个作业包单元?重新激活,~180[s]延迟批处理重新恢复仍在100个HPC节点的工厂等待处理的作业包似乎不是法律问题,HPC基础设施效率驱动的工作实践流程越少,是吗?我同意你的评估,没有必要使用延迟。问题看起来像ps-f | grep ps,它也显示了grep命令。解决方法:ps-f | grep ps | grep-v grep和ps-f | grep[p]s。你能试试qstat-u username | grep-c[Q]吗?我用上面的代码得到了所需的流序列。只是想帮助一下:错误计数和调整结果比正确计数更难理解。顺便说一句,使用/宾/巴什,不是!bin/bashI同意,做出了改变@Sameeresque:在循环体中有三个点,计算qstat-u username | grep-cq。从维护和效率的角度来看,在循环体开始时计算并将结果存储在变量中不是更好吗?问题看起来像ps-f | grep ps,它也显示了grep命令。解决方法:ps-f | grep ps | grep-v grep和ps-f | grep[p]s。你能试试qstat-u username | grep-c[Q]吗?我用上面的代码得到了所需的流序列。只是想帮助一下:错误计数和调整结果比正确计数更难理解。顺便说一句,使用/宾/巴什,不是!bin/bashI同意,做出了改变@Sameeresque:在循环体中有三个点,计算qstat-u username | grep-c Q。从维护和效率的角度来看,在循环体开始时计算并将结果存储在变量中不是更好吗?