我有几个需要并行运行的 bash 脚本。但是,它们是内存猪,所以我想将它们中的每一个错开 30 秒,但仍然并行运行。例如:
hourr=($(seq 0 1 23))
for q in "${hourr[@]}";
do;
echo $q; sleep 10;
done
这会等待 10 秒,然后按顺序输出一个从 0 到 23 的数字。但是,当我尝试使用我的脚本执行此操作时:
hourr=($(seq 0 1 23))
input1="20160101";
input2="10"; #(Note: These are inputs to each of the scripts I want to run)
scriptdir="/path/to/somewhere"
for q in "${hourr[@]}"
do
if [ "${#q}" == "1" ]
then
hh=0${q}
else
hh=${q}
fi
echo $hh
( bash $scriptdir/Hour$hh.csh $input1 $input2 ; sleep 30 ) &
done
wait
echo "All done!"
但是,所有 Hour 脚本在执行主脚本时立即(正确且并行)运行,并且不会等待我指定的 30 秒一个接一个地运行。有什么想法吗?
如果你这样做呢?
正如评论中指出的那样,这
&
导致您sleep
也在后台执行,因此您的脚本不会等待它完成,然后再移动到循环的下一次迭代。你的hourr
数组也是不必要的