| 
1
 | 
     1 
 | 
| 
 | 
     2 # modified from Chenghai Xue's script
 | 
| 
 | 
     3 
 | 
| 
 | 
     4 #test if qsub works
 | 
| 
 | 
     5 
 | 
| 
 | 
     6 my $qsub_checker = 0;
 | 
| 
 | 
     7 if(system("hash qsub >/dev/null"))
 | 
| 
 | 
     8 {
 | 
| 
 | 
     9 	$qsub_checker = 0;
 | 
| 
 | 
    10 }
 | 
| 
 | 
    11 else
 | 
| 
 | 
    12 {
 | 
| 
 | 
    13 	$test_randname=random_sessid();
 | 
| 
 | 
    14 	system("mkdir $test_randname;");
 | 
| 
 | 
    15 	system("echo 'mkdir $test_randname/$test_randname' >$test_randname/$test_randname.sh");
 | 
| 
 | 
    16 	system("mkdir $test_randname/qsub_cache");
 | 
| 
 | 
    17 	system ("qsub -cwd -v TMPDIR=$test_randname/qsub_cache -V -e $test_randname/qsub_cache -o $test_randname/qsub_cache -N $test_randname  $test_randname/$test_randname.sh");
 | 
| 
 | 
    18 
 | 
| 
 | 
    19 	$status=0;
 | 
| 
 | 
    20 	$sec=5;
 | 
| 
 | 
    21 	while(1)
 | 
| 
 | 
    22 	{
 | 
| 
 | 
    23 		$chkresult=`qstat |grep $test_randname |wc -l`;
 | 
| 
 | 
    24 		chomp($chkresult);
 | 
| 
 | 
    25 		if ($chkresult == 0)
 | 
| 
 | 
    26 		{
 | 
| 
 | 
    27 			$sec=10;
 | 
| 
 | 
    28 			$status++;
 | 
| 
 | 
    29 			last if ($status==3);
 | 
| 
 | 
    30 		}
 | 
| 
 | 
    31 		else
 | 
| 
 | 
    32 		{
 | 
| 
 | 
    33 			$status=0;
 | 
| 
 | 
    34 			$sec=5;
 | 
| 
 | 
    35 		}
 | 
| 
 | 
    36 		print "QSTAT: $chkresult testing tasks running.....$taskname\n";
 | 
| 
 | 
    37 		sleep($sec);
 | 
| 
 | 
    38 	}
 | 
| 
 | 
    39 	print "QSUB: testing done\n";
 | 
| 
 | 
    40 	print "$test_randname/$test_randname\n";
 | 
| 
 | 
    41 	if(-d "$test_randname/$test_randname")
 | 
| 
 | 
    42 	{
 | 
| 
 | 
    43 		$qsub_checker=1;
 | 
| 
 | 
    44 		print "QSUB: working well!\n";
 | 
| 
 | 
    45 	}
 | 
| 
 | 
    46 #$qsub_checker=`qsub </dev/null 2>&1|grep stdin|wc -l`;
 | 
| 
 | 
    47 	system("rm $test_randname -rf");
 | 
| 
 | 
    48 }
 | 
| 
 | 
    49 #$qsub_checker=0;
 | 
| 
 | 
    50 if($qsub_checker == 0)
 | 
| 
 | 
    51 {
 | 
| 
 | 
    52 	print "QSUB: No GRID qsub found\n";
 | 
| 
 | 
    53 	print "QSUB: if you are using PBS qsub, please wait for the next version! Thanks.\n";
 | 
| 
 | 
    54 	print "QSUB: Running in serial mode...\n";
 | 
| 
 | 
    55 	system("sh $ARGV[0]");
 | 
| 
 | 
    56 	exit;
 | 
| 
 | 
    57 }
 | 
| 
 | 
    58 
 | 
| 
 | 
    59 $performListFile = $ARGV[0];
 | 
| 
 | 
    60 $taskname = "";
 | 
| 
 | 
    61 $taskname = $ARGV[1];
 | 
| 
 | 
    62 if (not $taskname)
 | 
| 
 | 
    63 {
 | 
| 
 | 
    64 	$taskname=random_sessid();
 | 
| 
 | 
    65 }
 | 
| 
 | 
    66 #$outfullDir = $ARGV[2];
 | 
| 
 | 
    67 $outfullDir ="qsub_cache";
 | 
| 
 | 
    68 
 | 
| 
 | 
    69 # correct path
 | 
| 
 | 
    70 if(! (-d $outfullDir) ){
 | 
| 
 | 
    71 	system ("mkdir $outfullDir");
 | 
| 
 | 
    72 }
 | 
| 
 | 
    73 
 | 
| 
 | 
    74 # create a temp cache
 | 
| 
 | 
    75 @temp = split("/", $0);
 | 
| 
 | 
    76 $prog = pop @temp;
 | 
| 
 | 
    77 $cache = $outfullDir."/".$prog."_".$taskname;
 | 
| 
 | 
    78 if(! (-d $cache) ){
 | 
| 
 | 
    79 	system ("mkdir $cache");
 | 
| 
 | 
    80 }
 | 
| 
 | 
    81 
 | 
| 
 | 
    82 open (IN_1, "$performListFile") or die "can not open file $performListFile to read\n";
 | 
| 
 | 
    83 @performList = (<IN_1>);
 | 
| 
 | 
    84 chomp @performList;
 | 
| 
 | 
    85 close IN_1 or die "can't close the input file : $!";
 | 
| 
 | 
    86 
 | 
| 
 | 
    87 
 | 
| 
 | 
    88 $scriptListFile = $outfullDir."/".$taskname."_scripts.list";
 | 
| 
 | 
    89 open (FSCRIPLIST, ">$scriptListFile");
 | 
| 
 | 
    90 for($i=0; $i<@performList; $i++){
 | 
| 
 | 
    91 	$scriptFile = $outfullDir."/".$taskname."_script$i.sh";
 | 
| 
 | 
    92 	print FSCRIPLIST "$scriptFile\n";
 | 
| 
 | 
    93 	open (FOUT, ">$scriptFile");
 | 
| 
 | 
    94 
 | 
| 
 | 
    95 #	print FOUT "#!/usr/bin/sh\n";
 | 
| 
 | 
    96 	print FOUT "$performList[$i]\n";
 | 
| 
 | 
    97 			
 | 
| 
 | 
    98 #		print OUT_1 "$outfile.map\n";
 | 
| 
 | 
    99 	close (FOUT);
 | 
| 
 | 
   100 }
 | 
| 
 | 
   101 close (FSCRIPLIST);
 | 
| 
 | 
   102 
 | 
| 
 | 
   103 open (IN_2, "$scriptListFile") or die "can not open file $scriptListFile to read\n";
 | 
| 
 | 
   104 $basename=`basename $performListFile`;
 | 
| 
 | 
   105 chop($basename);
 | 
| 
 | 
   106 $taskname=$taskname."_".$basename;
 | 
| 
 | 
   107 #print $basename;
 | 
| 
 | 
   108 while(<IN_2>){
 | 
| 
 | 
   109 	$f = $_;
 | 
| 
 | 
   110 	chomp $f;
 | 
| 
 | 
   111 	@temp = split("/", $f);
 | 
| 
 | 
   112 	$base = pop @temp;
 | 
| 
 | 
   113 	
 | 
| 
 | 
   114 	#use default queues
 | 
| 
 | 
   115 #	print "/opt/n1ge6/bin/lx24-amd64/qsub -l virtual_free=1.7G -cwd -v TMPDIR=$cache -V -e $cache -o $cache -N $taskname.$base $f\n\n\n";
 | 
| 
 | 
   116 	#system ("qsub -l virtual_free=1.7G -cwd -v TMPDIR=$cache -V -e $cache -o $cache -N $taskname.$base $f");
 | 
| 
 | 
   117 	system ("qsub -cwd -v TMPDIR=$cache -V -e $cache -o $cache -N $taskname.$base $f");
 | 
| 
 | 
   118 	
 | 
| 
 | 
   119 }
 | 
| 
 | 
   120 close IN_2 or die "can't close the input file : $!";
 | 
| 
 | 
   121 
 | 
| 
 | 
   122 #start to check stats of qsub tasks
 | 
| 
 | 
   123 #######################################
 | 
| 
 | 
   124 my $taskname_query=substr($taskname,0,10);
 | 
| 
 | 
   125 
 | 
| 
 | 
   126 
 | 
| 
 | 
   127 $status=0;
 | 
| 
 | 
   128 $sec=60;
 | 
| 
 | 
   129 while(1)
 | 
| 
 | 
   130 {
 | 
| 
 | 
   131 	$chkresult=`qstat |grep $taskname_query |wc -l`;
 | 
| 
 | 
   132 	chomp($chkresult);
 | 
| 
 | 
   133 	if ($chkresult == 0)
 | 
| 
 | 
   134 	{
 | 
| 
 | 
   135 		$sec=10;
 | 
| 
 | 
   136 		$status++;
 | 
| 
 | 
   137 		last if ($status==3);
 | 
| 
 | 
   138 	}
 | 
| 
 | 
   139 	else
 | 
| 
 | 
   140 	{
 | 
| 
 | 
   141 		$status=0;
 | 
| 
 | 
   142 		$sec=60;
 | 
| 
 | 
   143 	}
 | 
| 
 | 
   144 	print "QSTAT: $chkresult tasks running.....$taskname\n";
 | 
| 
 | 
   145 	sleep($sec);
 | 
| 
 | 
   146 }
 | 
| 
 | 
   147 print "QSUB: done: $taskname \n";
 | 
| 
 | 
   148 ######################################
 | 
| 
 | 
   149 
 | 
| 
 | 
   150 #
 | 
| 
 | 
   151 sub random_sessid
 | 
| 
 | 
   152 {
 | 
| 
 | 
   153 	#my @chars = (0..9,a..z,A..Z);
 | 
| 
 | 
   154 	my @chars = ('a'..'z','A'..'Z');
 | 
| 
 | 
   155 	my $len = 10;
 | 
| 
 | 
   156 	my $string = join '', map {$chars[rand(@chars)]} (1..$len);
 | 
| 
 | 
   157 	return $string;
 | 
| 
 | 
   158 }
 |