sub _replicate{ my $ref = shift; foreach my $sc ( @{ $ref } ) { next unless (defined $sc); mkdir( $LOG_FOLDER . "/" . $sc->{sc_name} ); my @thr_arr = (); foreach my $robj( @{ $sc->{ rsync} } ){ $robj->{thr} => 'running'; my $th = threads->create( \&worker, $robj ); push @thr_arr, $th->tid; } $_->join for @thr_arr; } } sub worker{ my $robj = shift; my( $rsync, $server, $from, $to ) = @{ $robj->{ elements } }; my $alt_server = $RSYNC_CONN_STR_2; for my $i ( 0 .. $MAX_REPL_ATTEMPT ){ my $rsync_cmd = $rsync . $server . $from . $to; `$rsync_cmd`; if ($?){ $rsync_cmd = $rsync . $server . $from . $to; $server = ( $i % 2 ) ? $RSYNC_CONN_STR_1 : $RSYNC_CONN_STR_2; sleep(120); } else{ $robj->{status} = "Completed"; last; } } $robj->{thr} = 'done'; }