在bash/ksh中同步等待进程完成



我有一个脚本,可以与'nohup'命令同时运行几个命令。每个人创建一个文件作为成功的确认。

我如何写循环或其他的检查每隔30秒的文件

每个'nohup'命令创建特定的文件,如commadOneFile, commandTwoFile,…

注意:每个'nohup'命令的执行时间不同。我想在等待时在屏幕上打印点,或任何其他等待和进度指示。

编辑:

例如

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

正如'B Johnson'上面提到的,您必须考虑到其中一个子命令可能会失败。否则,您正在寻找的while循环将永远不会结束。你可以这样写这个循环:

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

运行完commandOne后,在后台运行waitOne

我创建了一个函数:

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
}

BRKolesar

最新更新