Повторение команды на bash до тех пор, пока условие не будет выполнено - PullRequest
1 голос
/ 27 января 2020

У меня есть доступ ровно к 100 узлам. После того, как я отправляю задания на все 100 узлов, я хотел бы выполнить запрос после 180 секунд ожидания, чтобы выяснить, сколько заданий все еще находится в очереди. Если в очереди есть несколько заданий, вывод bash будет указывать количество ожидающих заданий. Если все задания начнут выполняться на 100 узлах, я хотел бы отправить новые задания и делать это до тех пор, пока все задания не будут завершены. Когда все задания завершены, bash должен выйти, а l oop.

Я написал следующие строки bash code

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 выходит, а l oop только через 1 проход, вопреки ожиданиям .

1 Ответ

3 голосов
/ 27 января 2020

Я заставил его работать так:

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