在 bash 上重复命令直到满足条件
Repeating a command on bash until condition is met
我正好可以访问 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
我正好可以访问 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