parallel: Implemented --ssh.

This commit is contained in:
Ole Tange 2015-05-10 22:52:47 +02:00
parent 2549b9ba1a
commit d4c347c22b
4 changed files with 26 additions and 7 deletions

View file

@ -741,6 +741,7 @@ sub options_hash {
"sshlogin|S=s" => \@opt::sshlogin, "sshlogin|S=s" => \@opt::sshlogin,
"sshloginfile|slf=s" => \@opt::sshloginfile, "sshloginfile|slf=s" => \@opt::sshloginfile,
"controlmaster|M" => \$opt::controlmaster, "controlmaster|M" => \$opt::controlmaster,
"ssh=s" => \$opt::ssh,
"return=s" => \@opt::return, "return=s" => \@opt::return,
"trc=s" => \@opt::trc, "trc=s" => \@opt::trc,
"transfer" => \$opt::transfer, "transfer" => \$opt::transfer,
@ -5387,8 +5388,8 @@ sub sshcommand_of_sshlogin {
# login@host # login@host
my $self = shift; my $self = shift;
my ($sshcmd, $serverlogin); my ($sshcmd, $serverlogin);
# If $SSH is unset, use 'ssh' # If $opt::ssh is unset, use $PARALLEL_SSH or 'ssh'
$ENV{'PARALLEL_SSH'} ||= "ssh"; $opt::ssh ||= $ENV{'PARALLEL_SSH'} || "ssh";
if($self->{'string'} =~ /(.+) (\S+)$/) { if($self->{'string'} =~ /(.+) (\S+)$/) {
# Own ssh command # Own ssh command
$sshcmd = $1; $serverlogin = $2; $sshcmd = $1; $serverlogin = $2;
@ -5397,7 +5398,7 @@ sub sshcommand_of_sshlogin {
if($opt::controlmaster) { if($opt::controlmaster) {
# Use control_path to make ssh faster # Use control_path to make ssh faster
my $control_path = $self->control_path_dir()."/ssh-%r@%h:%p"; my $control_path = $self->control_path_dir()."/ssh-%r@%h:%p";
$sshcmd = $ENV{'PARALLEL_SSH'}." -S ".$control_path; $sshcmd = $opt::ssh." -S ".$control_path;
$serverlogin = $self->{'string'}; $serverlogin = $self->{'string'};
if(not $self->{'control_path'}{$control_path}++) { if(not $self->{'control_path'}{$control_path}++) {
# Master is not running for this control_path # Master is not running for this control_path
@ -5419,14 +5420,14 @@ sub sshcommand_of_sshlogin {
# if the ssh connection closes. # if the ssh connection closes.
my $sleep = ::shell_quote_scalar my $sleep = ::shell_quote_scalar
('$|=1;while(1){sleep 1;print "foo\n"}'); ('$|=1;while(1){sleep 1;print "foo\n"}');
my @master = ($ENV{'PARALLEL_SSH'}, "-tt", "-MTS", my @master = ($opt::ssh, "-tt", "-MTS",
$control_path, $serverlogin, "perl", "-e", $control_path, $serverlogin, "perl", "-e",
$sleep); $sleep);
exec(@master); exec(@master);
} }
} }
} else { } else {
$sshcmd = $ENV{'PARALLEL_SSH'}; $serverlogin = $self->{'string'}; $sshcmd = $opt::ssh; $serverlogin = $self->{'string'};
} }
} }
$self->{'sshcommand'} = $sshcmd; $self->{'sshcommand'} = $sshcmd;

View file

@ -1679,6 +1679,13 @@ Do not use the first line of input (used by GNU B<parallel> itself
when called with B<--shebang>). when called with B<--shebang>).
=item B<--ssh> I<sshcommand> (alpha testing)
GNU B<parallel> defaults to using B<ssh> for remote access. This can
be overridden with B<--ssh>. It can also be set on a per server
basis (see B<--sshlogin>).
=item B<--sshdelay> I<secs> =item B<--sshdelay> I<secs>
Delay starting next ssh by I<secs> seconds. GNU B<parallel> will pause Delay starting next ssh by I<secs> seconds. GNU B<parallel> will pause
@ -3442,8 +3449,9 @@ $SHELL. If undefined use:
=item $PARALLEL_SSH (alpha testing) =item $PARALLEL_SSH (alpha testing)
GNU B<parallel> defaults to using B<ssh> for remote access. This can GNU B<parallel> defaults to using B<ssh> for remote access. This can
be overridden with $PARALLEL_SSH. It can also be set on a per server be overridden with $PARALLEL_SSH, which again can be overridden with
basis (see B<--sshlogin>). B<--ssh>. It can also be set on a per server basis (see
B<--sshlogin>).
=item $PARALLEL_SEQ =item $PARALLEL_SEQ

View file

@ -66,6 +66,11 @@ echo '### use function as $PARALLEL_SSH'
export -f foossh; export -f foossh;
PARALLEL_SSH=foossh parallel -S 1/lo echo ::: 'Run through FOOSSH?' PARALLEL_SSH=foossh parallel -S 1/lo echo ::: 'Run through FOOSSH?'
echo '### use --ssh'
barssh() { echo "BARSSH" >&2; ssh "$@"; };
export -f barssh;
parallel --ssh barssh -S 1/lo echo ::: 'Run through BARSSH?'
echo '### test filename :' echo '### test filename :'
echo content-of-: > :; echo content-of-: > :;
echo : | parallel -j1 --trc {}.{.} -S parallel@lo '(echo remote-{}.{.};cat {}) > {}.{.}'; echo : | parallel -j1 --trc {}.{.} -S parallel@lo '(echo remote-{}.{.};cat {}) > {}.{.}';

View file

@ -89,6 +89,11 @@ echo '### use function as $PARALLEL_SSH'
foossh() { echo "FOOSSH" >&2; ssh "$@"; }; export -f foossh; PARALLEL_SSH=foossh parallel -S 1/lo echo ::: 'Run through FOOSSH?' foossh() { echo "FOOSSH" >&2; ssh "$@"; }; export -f foossh; PARALLEL_SSH=foossh parallel -S 1/lo echo ::: 'Run through FOOSSH?'
Run through FOOSSH? Run through FOOSSH?
FOOSSH FOOSSH
echo '### use --ssh'
### use --ssh
barssh() { echo "BARSSH" >&2; ssh "$@"; }; export -f barssh; parallel --ssh barssh -S 1/lo echo ::: 'Run through BARSSH?'
Run through BARSSH?
BARSSH
echo '### test filename :' echo '### test filename :'
### test filename : ### test filename :
echo content-of-: > :; echo : | parallel -j1 --trc {}.{.} -S parallel@lo '(echo remote-{}.{.};cat {}) > {}.{.}'; cat :.:; rm : :.: echo content-of-: > :; echo : | parallel -j1 --trc {}.{.} -S parallel@lo '(echo remote-{}.{.};cat {}) > {}.{.}'; cat :.:; rm : :.: