在bash/ksh中同步等待预处理完成
我有一个脚本,可以同时运行几个命令和'nohup'命令。他们每个人都创建一个文件作为成功的确认 我如何写循环或任何东西来每隔几秒钟检查这些文件 每个“nohup”命令都创建特定的文件,如commadOneFile、commandTwoFile等 注意: 每个“nohup”命令都有不同的执行时间。 我想在等待时在屏幕上打印点,或者打印任何其他等待和进度指示器 编辑: 比如说在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
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循环”只检查文件。祝你好运