символическое ожидание завершения preocess в bash / ksh - PullRequest
0 голосов
/ 25 октября 2011

У меня есть скрипт для запуска нескольких команд одновременно с командой nohup. Каждый из них создает файл в качестве подтверждения успеха.

Как я могу написать цикл или что-то еще для проверки этих файлов каждые несколько секунд.

Каждая команда 'nohup' создает определенный файл, например, commadOneFile, commandTwoFile, ...

Примечание: Каждая из команд nohup имеет разное время выполнения. Я хочу напечатать точки на экране во время ожидания или любой другой индикатор ожидания и прогресса.

Edit: Например

for command in COM1 COM2 COM3
do
    if [ "${command}" == "COM1" ]; then
            nohup $(ksh /run/my/commandOne.ksh)
    elif [ "${command}" == "COM2" ]; then
            nohup $(ksh /run/my/commandTwo.ksh)
    else [ "${command}" == "COM3" ]; then
            nohup $(ksh /run/my/commandThree.ksh)
done

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Как упомянуто выше «B Johnson», вы должны учитывать, что одна из подкоманд может потерпеть неудачу. В противном случае цикл while, который вы ищете, никогда не закончится. Вы можете написать цикл так:

waitOne()
{
    while [ ! -f /path/to/fileOne ]; do
        sleep 10
    done
    echo -n "fileOne is created"
}

После запуска commandOne запустите waitOne в фоновом режиме.

0 голосов
/ 26 октября 2011

Я создал функцию:

wait_d() {
    set -A COMPONENTS $@
    ii=0;
    while : 
    do
        echo -n "="
        sleep 10
        let ii++

        jj=0;
        for component in ${COMPONENTS[@]}
        do
            if [ -f ${STATUS_DIR}/${component}done ] ; then
                rm ${STATUS_DIR}/${component}done
                unset COMPONENTS[$jj]
            fi;
            let jj++
        done

        if [ ${#COMPONENTS[@]} == 0 ] ; then
            break;
        fi;
    done
}

BR Kolesar

...