in reply to SSH to multiple servers
I personally still use system /ssh -i $key -h $host/ for perl scripts although using other ways specified (Net::SSH::Perl) might work better for you. I have found that I still like to use system /ssh $blah/ because I am still a fan of pwless SSH keys because of the way I have the security of my network layed out (and I am sure that a lot of people would argue my use of this, but this isn't the time or the place for that).
However, I have found that when I need to have multiple connections or do multiple time intensive things simultaneously that I use Parallel::ForkManager. It just forks off processes and lets you set the max number of processes that you would like to allow to run continuously.
# Begin ForkManager my $_max_procs = 5; $_pm = new Parallel::ForkManager($_max_procs); # Log at process fork $_pm ->run_on_start( sub { my ($pid, $host) = @_; print "Forking process PID: $pid\n"; } ); # Log at process copmletion $_pm ->run_on_finish( sub { my ($pid, $exit_code, $host) = @_; print "Finishing up process PID: $pid\n"; } ); $_pm->run_on_wait( sub { print "Waiting for children to finish.\n" }, 5.0 ); foreach my $ssh_host (keys %{$ssh_host_list}) { # Fork off the children and get going on the queries my $pid = $_pm->start($ssh_host) and next; # do script stuff here # Closing the forked process $_pm->finish; } # Ensure all children have finished $_pm->wait_all_children; exit(1);
|
|---|