Bug 14245 - [FR] wait_test()
Summary: [FR] wait_test()
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: libshell (show other bugs)
Version: unstable
Hardware: all Linux
: P2 enhancement
Assignee: Alexey Gladkov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-01-30 11:45 MSK by Michael Shigorin
Modified: 2009-03-10 20:33 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Shigorin 2008-01-30 11:45:06 MSK
Возможно ли добавить в libshell такую функцию для конечного периодического теста
с таймаутом? (название, возможно, неоптимальное...)

# $1 is a test (e.g. "-s" for "non-empty file")
# $2 is an object to apply test to (e.g. a filename)
# $3 is timeout (5 by default; e.g. "10")
# $4 is a pause (1 sec by default; e.g. "0.1")
wait_test()
{
    [ -n "$1" -a -n "$2 ] || return
    tries=${3:-5}
    pause=${4:-1}
    for i in `seq 1 $tries`; do
        [ "$1" "$2" ] && break
        sleep $pause
    done
}

В некоторых ситуациях может хотеться поспать "перед", а не
"после", но это можно компенсировать добавлением своего sleep
перед вызовом данной функции.

Пример ситуации, когда понадобилось -- alterator-ovz:

alt_new()
{
# ...
    запускаем_длинную_команду_в_фоне \
            > $LOG_DIR/$in_profile 2>&1" &
# а вот здесь можем вернуться слишком рано 
# и за этим логом следить не предложат
    for i in `seq 1 5`; do
        [ -s "$LOG_DIR/$in_profile" ] && break
        sleep 1
    done
# но мы хитрей :)
    echo '()'
}
Comment 1 Alexey Gladkov 2009-02-27 13:57:03 MSK
(В ответ на комментарий №0)
> Пример ситуации, когда понадобилось -- alterator-ovz:
> 
> alt_new()
> {
> # ...
>     запускаем_длинную_команду_в_фоне \
>             > $LOG_DIR/$in_profile 2>&1" &

Почему после этого не сказать wait и после этого проверить файл ?

> # а вот здесь можем вернуться слишком рано 
> # и за этим логом следить не предложат
>     for i in `seq 1 5`; do
>         [ -s "$LOG_DIR/$in_profile" ] && break
>         sleep 1
>     done
> # но мы хитрей :)
>     echo '()'
> }
Comment 2 Michael Shigorin 2009-03-03 19:11:44 MSK
Уже не помню, но про wait знал и тогда.
Comment 3 Alexey Gladkov 2009-03-03 19:18:58 MSK
(В ответ на комментарий №2)
> Уже не помню, но про wait знал и тогда.

Тогда закрой.
Comment 4 Michael Shigorin 2009-03-10 20:33:36 MSK
Хорошо.