diff options
-rwxr-xr-x | vest/parallelize.pl | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/vest/parallelize.pl b/vest/parallelize.pl index 9d3f61c4..a81edee0 100755 --- a/vest/parallelize.pl +++ b/vest/parallelize.pl @@ -61,6 +61,16 @@ sub escape_shell { } return $arg; } +my $tailn=5; +sub preview_files { + my $n=shift; + $n=$tailn unless defined $n; + my $fn=join(' ',map {escape_shell($_)} @_); + my $cmd="tail -n $n $fn"; + my $text=`$cmd`; + debug($cmd,$text); + $text +} my $abscwd=abspath(&getcwd); sub print_help; @@ -135,11 +145,15 @@ chomp $executable; srand; my $port = 50300+int(rand($randp)); my $endp=$port+$tryp; -my $netstat=`netstat -a -n 2>/dev/null | grep LISTENING | grep -i tcp`; +sub listening_port_lines { + my $quiet=$verbose?'':'2>/dev/null'; + `netstat -a -n $quiet | grep LISTENING | grep -i tcp` +} +my $netstat=&listening_port_lines; if ($verbose){ print STDERR "Testing port $port...";} -while ($netstat=~/$port/s){ +while ($netstat=~/$port/ || &listening_port_lines=~/$port/){ if ($verbose){ print STDERR "port is busy\n";} $port++; if ($port > $endp){ @@ -164,7 +178,7 @@ my $cdcmd=$no_cd ? '' : "cd '$abscwd'\n"; # fork == one thread runs the sentserver, while the # other spawns the sentclient commands. if (my $pid = fork){ - sleep 5; # give other thread time to start sentserver + sleep 2; # give other thread time to start sentserver $script = qq{wait $cdcmd @@ -210,7 +224,13 @@ sub numof_live_jobs { my @livejobs = grep(/$joblist/, split(/\n/, `qstat`)); return ($#livejobs + 1); } - +my (@errors,@outs,@cmds); +my $scriptfile="$errordir/$executable.sh"; +if ($errordir) { + open SF,">",$scriptfile || die; + print SF $cmd,"\n"; + close SF; +} sub launch_job_on_node { my $node = $_[0]; @@ -227,8 +247,12 @@ sub launch_job_on_node { if ($errordir){ $errorfile = "$errordir/$clientname.ER"; $outfile = "$errordir/$clientname.OU"; + push @errors,$errorfile; + push @outs,$outfile; } my $todo = "qsub -l mem_free=$pmem -N $clientname -o $outfile -e $errorfile"; + push @cmds,$todo; + if ($verbose){ print STDERR "Running: $todo\n"; } local(*QOUT, *QIN); open2(\*QOUT, \*QIN, $todo); @@ -237,12 +261,13 @@ sub launch_job_on_node { while (my $jobid=<QOUT>){ chomp $jobid; if ($verbose){ print STDERR "Launched client job: $jobid"; } - push(@cleanup_cmds, "`qdel $jobid 2> /dev/null`"); $jobid =~ s/^(\d+)(.*?)$/\1/g; - $jobid =~ s/^Your job (\d+) .*$/\1/; - print STDERR "short job id $jobid\n"; + $jobid =~ s/^Your job (\d+) .*$/\1/; + print STDERR " short job id $jobid\n"; if ($joblist == "") { $joblist = $jobid; } else {$joblist = $joblist . "\|" . $jobid; } + my $cleanfn="`qdel $jobid 2> /dev/null`"; + push(@cleanup_cmds, $cleanfn); } close QOUT; } @@ -259,6 +284,9 @@ sub cleanup { if ($verbose){ print STDERR " $cmd\n"; } eval $cmd; } + print STDERR "outputs:\n",preview_files(undef,@outs),"\n"; + print STDERR "errors:\n",preview_files(undef,@errors),"\n"; + print STDERR "cmd:\n",$cmd,"\n"; if ($verbose){ print STDERR "Cleanup finished.\n"; } } |