#! /usr/bin/perl # # Perl script to generate submission script for PBS cluster queues # my $nodes = 3; my $queue = "default"; my $runtime = 99; my $name = "McSub"; my @cmdline; for($i = 0; $i < @ARGV; $i++) { if($ARGV[$i] =~ /--help|-h$/) { $show_help=1; } elsif($ARGV[$i] =~ /^--nodes=([0-9]+)$/) { $nodes = $1; } elsif($ARGV[$i] =~ /^--name=([a-zA-Z0-9_]+)$/) { $name = $1; } elsif(($ARGV[$i] =~ /^-q([a-zA-Z0-9_]+)$/) || ($ARGV[$i] =~ /^--queue=([a-zA-Z0-9_]+)$/)) { $queue = $1; } elsif(($ARGV[$i] =~ /^-r([0-9]+)$/) || ($ARGV[$i] =~ /^--runtime=([0-9]+)$/)) { $runtime = $1; } elsif($ARGV[$i] =~ /mcrun/) { # strip any reference to mcrun } else { push @cmdline, $ARGV[$i]; } } if (@cmdline == 0) { $show_help=1; } if ($show_help) { die "Usage: mcsub [options] [mcrun params] -h --help Show this help -r N --runtime=N Specify maximum runtime (hours) [default 99] -q QNAME --queue=QNAME Specify wanted openPBS queue [default 'default'] --nodes=NUM Specify wanted number of nodes [default 3] --name=NAME Specify openPBS job name [default McSub] \n\nAfter running mcsub NAME.batch is ready for submission using the qsub command\n"; } else { # Write PBS script to STDOUT open($OUT,"> $name.batch") || die "Could not write to $name.batch!\n"; print $OUT "#!/bin/sh\n#\n# sauron queue script generated by mcsub\n\n"; print $OUT "### Job name\n"; print $OUT "#PBS -N $name\n"; print $OUT "### Number of cpus\n"; print $OUT "#PBS -lncpus=$nodes\n"; print $OUT "### Maximum walltime\n"; print $OUT "#PBS -l walltime=$runtime:00:00\n"; print $OUT "### Send mail on b)egin e)xit a)bort\n"; print $OUT "#PBS -m abe\n"; print $OUT "### Output\n"; print $OUT "#PBS -o $name.OUT\n"; print $OUT "#PBS -e $name.ERR\n"; print $OUT "### Queue name\n"; print $OUT "#PBS -q $queue\n"; print $OUT "\n\n"; print $OUT "### Set up mcrun line\n"; print $OUT "cd \$PBS_O_WORKDIR\n"; print $OUT "mcrun --mpi=$nodes --machines=\$PBS_NODEFILE "; print $OUT join(' ',@cmdline); print $OUT "\n### END of McSub script\n"; close($OUT); print "Batchfile $name.batch is now ready for submission using qsub!\n"; print "\nNOTE: Please compile your instrumentfile using\n"; print " mcrun --mpi -c -n0 instrument.instr\n"; print " before submitting!\n"; }