我有以下脚本:
loop=0
for did in $(echo "$dids")
do
echo "$did"
loop=$((loop+1))
if [ $loop -lt 10 ] ; then
./account_locate_by_phonenumber.sh "$did" 2>/dev/null >>accounts.csv &
else
wait
#make sure to call locate script again or we'll skip this phone number
./account_locate_by_phonenumber.sh "$did" 2>/dev/null >>accounts.csv &
loop=0
fi
done
它正在调用另一个脚本 account_locate_by_phonenumber.sh 它通过ssh从远程mysql服务器获取结果。
如果我没有后台调用该脚本,我没有问题。后台调用时会出现问题。我目前进行十次迭代,然后调用wait以暂时暂停并且不会完全压倒远程服务器。写入的大多数行都很好,但每隔一段时间(10-50行之间)就会同时写入两行,并且输出都是混合的。
我假设我需要以某种方式捕获输入,然后立即将其全部写入,或者每组迭代,但是我要知道如何做到这一点。
答案 0 :(得分:2)
将每个迭代的输出写入另一个文件并连接它们。
loop=0
for did in $(echo "$dids")
do
echo "$did"
loop=$((loop+1))
if [ $loop -lt 10 ] ; then
./account_locate_by_phonenumber.sh "$did" 2>/dev/null >accounts.csv.$loop &
else
wait
cat accounts.csv.* >> accounts.csv
rm accounts.csv.*
#make sure to call locate script again or we'll skip this phone number
./account_locate_by_phonenumber.sh "$did" 2>/dev/null >accounts.csv.0 &
loop=0
fi
done
wait
cat accounts.csv.* >> accounts.csv
答案 1 :(得分:1)
如果你想在这里使用Bash ......怎么样:
否则,我建议使用对多个线程有更多库支持的语言。