#!/usr/bin/perl -w use strict; my @systems = ( # 'aulalinux-server', 'aulalinux0', 'aulalinux1', 'aulalinux2', 'aulalinux3', 'aulalinux4', 'aulalinux5', # 'aulalinux6', 'aulalinux7', 'aulalinux8', 'aulalinux9', 'aulalinux10', 'aulalinux11', 'aulalinux12', 'aulalinux13', 'aulalinux14', 'aulalinux15', 'aulalinux16' ); sub autoflush ($) { my $status = $_[0]; select STDERR; $| = $status; select STDOUT; $| = $status; } sub massrun ($$) { my $command = $_[0]; my $concurrent = $_[1]; my %pids; for my $system (@systems) { my $cmdline = "ssh $system $command"; if ($concurrent) { $pids{$system} = fork(); if (!$pids{$system}) { exec "$cmdline &> $system.log"; } } else { print STDERR "====== $cmdline ======\n"; system "$cmdline"; } } if ($concurrent) { for my $system (keys %pids) { #print "Waiting for $system (local PID $pids{$system})\n"; waitpid ($pids{$system}, 0); } } } autoflush (1); my $basename = `basename $0`; chomp $basename; my $username = `id -un`; chomp $username; my $numargs = $#ARGV+1; if ($basename eq 'ddo' && $numargs > 0) { massrun (join (' ', @ARGV), 0); } elsif ($basename eq 'ddoc' && $numargs > 0) { massrun (join (' ', @ARGV), 1); } elsif ($basename eq 'ddops' && $numargs == 0) { massrun ("ps -ALF | grep $username | grep -v \"ssh\\|ps\"", 0); }