Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash/ksh中同步等待预处理完成_Bash_Loops_Ksh_Simultaneous - Fatal编程技术网

在bash/ksh中同步等待预处理完成

在bash/ksh中同步等待预处理完成,bash,loops,ksh,simultaneous,Bash,Loops,Ksh,Simultaneous,我有一个脚本,可以同时运行几个命令和'nohup'命令。他们每个人都创建一个文件作为成功的确认 我如何写循环或任何东西来每隔几秒钟检查这些文件 每个“nohup”命令都创建特定的文件,如commadOneFile、commandTwoFile等 注意: 每个“nohup”命令都有不同的执行时间。 我想在等待时在屏幕上打印点,或者打印任何其他等待和进度指示器 编辑: 比如说 for command in COM1 COM2 COM3 do if [ "${command}" == "COM

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

我如何写循环或任何东西来每隔几秒钟检查这些文件

每个“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
}

Kolesar

你试过什么?在你的问题中加入一些小的代码示例,人们可以更精确地帮助你。如果其中一个子命令脚本失败了怎么办?是否创建过任何文件?主脚本是否等待所有子命令完成?主脚本是无限期地等待,还是在预定的时间后停止?我有一个控制定时器触发器。如果所有脚本都没有创建它们的控制文件,主脚本将被中止。是的,但在这种情况下(如果我在后台运行此循环),主脚本没有任何对child/nohup的控制或等待完整的脚本。主脚本不能显示进度条或任何用户知道在后台执行nohup脚本的类似内容。我可以对每个nohup命令进行while循环,并从主脚本中逐个执行以检查“success file”,但我希望同时对每个脚本运行检查。因为,每个脚本的执行时间是不同的。与原始问题不确定,但您是否尝试使用单独的脚本来监视脚本是否正在运行?那会有帮助吗?您还知道如何使用
myScript&
在后台运行脚本吗?您可以让您的“for循环”在后台启动所有脚本,然后让第二个“for循环”只检查文件。祝你好运