Beste WHT'ers,

Ik heb een ruby scriptje dat een text bestandje regel voor regel afloopt, en hier vervolgens ook wat mee doet. In het text bestandje staat een mapje met file die ge'rsynced moet worden.

Nu loopt dit goed, maar het rsync commando duurt te lang. Wat ik nu wil doen is het rsync gedeelte in meerdere threads laten lopen. Dus het while loopje moet gewoon doorgaan en de rsync in apparte threads afvuren (met een max instelbare threads var).

Volgens mij niet zo moeilijk maar ik ben bestwel een beginner kwa scripting en ruby wellicht weet iemand de oplossing?

Code:
# Set Variables
dbhost='xxx'
dbname='xxx'
username='xxx'
password='xxx'
spc_get='xxx'
log='/xxx.txt'

# our hostname, needed for the SPC
source='xxx'

# Load the date gem
require 'date'

f = File.open(log, "a")
  system('mysql -h'+ dbhost +' -u'+ username +' -p'+ password + ' -D'+ dbname +' -e"call ' + spc_get +'(\'getlist\',\''+ source +'\')" > /tmp/sync.tmp')

  dataArray= Array.new
  n=0
  File.new('/tmp/sync.tmp').each_line do |line|
       line.chomp!
        dataArray[n] = line.split(' ')
        n += 1
  end
  i=0

while(i < dataArray.length)
       id = dataArray[i][0].to_s
       tosync = dataArray[i][1].to_s
       type = dataArray[i][2].to_s
       var1=tosync.split('vms')
       filename = var1[1].to_s
       dirname = var1[0].to_s
       system('mkdir -p '+ dirname)
       #rsync het bestand
       system('/usr/local/bin/rsync -ae ssh --delete app-tst1:'+ dirname +'vms'+ filename +' '+ dirname + 'vms'+ filename +' > /tmp/rsync.log')
       i = i + 1

       #Opvangen exceptie uit Rsync
       if File.new('/tmp/rsync.log').stat.size?
           f.puts(DateTime.now.to_s + ' Exception during sync '+ dirname + filename)
           system('cat /tmp/rsync.log >> '+ log)
           File.delete('/tmp/rsync.log')
       else
        # Update database, rsync geslaagd
           system('mysql -h'+ dbhost +' -u'+ username +' -p'+ password + ' -D'+ dbname +' -e"call ' + spc_get +'(\'update\',\''+ id +'\')" ')
       end
  end
File.delete('/tmp/sync.tmp')
f.close