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

Likes:


Quote