До цикла, но как тайм-аут, если он терпит неудачу после 5 минут - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть это 2, пока в Bash:

until grep "1" /var/tmp/machineip > /dev/null;
do
    nova list --name spawningtestwin|grep spawningtestwin|awk -F= '{print $2}'|awk '{print $1}'|sed 's/ //g' > /var/tmp/machineip
done

mip=$(cat /var/tmp/machineip)
until ping -c1 $mip &>/dev/null; do :; done

Как я могу ограничить до 5 минут? Если через 5 минут он ничего не получит, он должен остановиться.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

timeout, вероятно, хороший вариант, но поскольку вы пытаетесь запустить цикл, может потребоваться немного больше синтаксиса, чем вы хотите. Если это то, что вы предпочитаете, я уверен, что мы можем привести пример.

Если вы хотите сделать это старомодным способом ...

declare -i now start=$(date +%s) # linux epoch timestamp in seconds
timeout=300                      # 300s = 5m
until grep -q "1" /var/tmp/machineip 
do now=$(date +%s)               # linux epoch timestamp in seconds
   if (( ( now - start ) < timeout )) # less than 5m
   then nova list --name spawningtestwin |
          awk -F= '/spawningtestwin/ {
             gsub(/ +//,"",$2);
             print $2
          }'                             > /var/tmp/machineip
          sleep 20
   else echo taking too much time.
        exit 1
   fi
done 

awk не мое состояние. ребята, пожалуйста, проверьте меня на этом ...

В частности, awk -F= '{print $2}'|awk '{print $1}' не имеет смысла для меня. В general каждый раз, когда несколько простых вызовов awk, sed и / или grep передаются по конвейеру, это заставляет меня думать, что большинство из них можно было бы исключить.

0 голосов
/ 02 ноября 2018

ВРЕМЯ = 0; пока ping -c1 $ mip &> / dev / null || test "$ TIMEOUT" -gt "$ ((5 * 60))"; делать :; сон 1; TIMEOUT = $ ((TIMEOUT + 1)); сделано

Вы можете изменить 5 на количество минут, которое вам нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...