Changeset 95 for trunk/oarutils
- Timestamp:
- Jan 24, 2013, 9:55:51 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/oarutils/oar-dispatch
r94 r95 15 15 16 16 my $task = 0; 17 my $overload = 1 .1;17 my $overload = 1; 18 18 my $file = ''; 19 my $dir; 20 my $cmd; 19 21 my $logtrace; 20 22 my $verbose; … … 27 29 'overload=f' => \$overload, 28 30 'file=s' => \$file, 31 'dir=s' => \$dir, 32 'cmd=s' => \$cmd, 29 33 'logtrace=s' => \$logtrace, 30 34 'verbose' => \$verbose, … … 62 66 # job to run 63 67 my @job = (); 64 open (JOB_LIST, '<', "$file") or die "can't open $file: $!"; 65 while (<JOB_LIST>) { 66 chomp; 67 next if m/^#/; 68 push @job, $_ if m/^\s*oarsub/; 69 } 70 close JOB_LIST; 68 #open (JOB_LIST, '<', "$file") or die "can't open $file: $!"; 69 #while (<JOB_LIST>) { 70 # chomp; 71 # next if m/^#/; 72 # push @job, $_ if m/^\s*oarsub/; 73 # } 74 #close JOB_LIST; 75 if (-e "$file") { 76 my $job_num = 0; 77 open(JOB_LIST, '<', "$file") or die "error: can't open job file $file: $!"; 78 while (my $job_cmd = <JOB_LIST>) { 79 chomp $job_cmd; 80 next if $job_cmd =~ m/^#/; 81 next if $job_cmd =~ m/^\s*$/; 82 # Add oarsub -S if not 83 $job_cmd = "oarsub -S $job_cmd" if $job_cmd !~ m/^\s*oarsub/; 84 $job_num++; 85 my ($job_name) = $job_cmd =~ m/#.*?\bname=(\S+?)\b/i; 86 $job_name ||= $job_num; 87 push @job, { 88 name => $job_name, 89 cmd => "$job_cmd", 90 num => $job_num, 91 }; 92 } 93 close JOB_LIST; 94 } 95 else { 96 # Add oarsub -S if not 97 $cmd = "oarsub -S $cmd" if $cmd !~ m/^\s*oarsub/; 98 my $job_num = 0; 99 opendir(DIR, $dir) or die "error: can't open folder $dir: $!"; 100 while (my $item = readdir(DIR)) { 101 next if $item =~ m/^\./; 102 next if $item =~ m/:/; 103 next if $item =~ m/\.old$/; 104 next if $item =~ m/\.sav$/; 105 next if $item =~ m/\.bak$/; 106 next if $item =~ m/\.no$/; 107 next unless (-d "$dir/$item"); 108 $job_num++; 109 push @job, { 110 name => $item, 111 cmd => "cd $dir/$item/; $cmd", 112 num => $job_num, 113 }; 114 } 115 closedir DIR; 116 } 71 117 72 118 my $container_id=$ENV{OAR_JOB_ID}; … … 79 125 } 80 126 81 82 127 my $finished = new Coro::Signal; 128 my $job_todo = new Coro::Semaphore 0; 129 my $job_name_maxlen; 130 for (@job) { 131 $job_todo->up; 132 $job_name_maxlen = length($_->{name}) if length($_->{name}) > $job_name_maxlen; 133 } 134 83 135 my $job_active = new Coro::Semaphore 0; 84 my $job_todo = new Coro::Semaphore 0;85 $job_todo->up for (@job);86 136 87 137 my %scheduled = (); … … 115 165 JOB: 116 166 for my $job (@job) { 167 my $job_name = $job->{name}; 168 my $job_cmd = $job->{cmd}; 169 170 # job has been already run ? 171 if (exists $state{$job_name}) { 172 if ($state{$job_name} eq 'start') { 173 print "warning: job $job_name was not clearly finished, relaunching...\n" 174 if $verbose; 175 } 176 elsif ($state{$job_name} eq 'end') { 177 delete $state{$job_name}; # free memory 178 $job_todo->down; 179 print "warning: job $job_name already run\n" if $verbose; 180 cede; 181 next JOB; 182 } 183 } 184 117 185 while ($job_active->count >= $task*$overload) { 118 186 cede; … … 122 190 last JOB if $oar_checkpoint->count() > 0; 123 191 124 $job =~ s/^\s*oarsub//;125 print " oarsub $insert_oar_option $job" if $verbose;126 my $job_id = ` oarsub $insert_oar_option $job|grep ^OAR_JOB_ID|cut -f 2 -d '='`;192 $job_cmd =~ s/^\b(oarsub)\b/$1 $insert_oar_option/; 193 print "$job_cmd" if $verbose; 194 my $job_id = `$job_cmd|grep ^OAR_JOB_ID|cut -f 2 -d '='`; 127 195 chomp $job_id; 128 196 if ($job_id > 1) { 129 $scheduled{$job_id}++; 197 $scheduled{$job_id} = { 198 name => $job_name, 199 }; 130 200 $job_active->up; 201 202 my $msg = sprintf "start job %${job_name_maxlen}s / %i at %s\n", 203 $job_name, $job_id, time; 204 $log_h->print($msg) if $logtrace; 205 print($msg) if $verbose; 131 206 } 132 207 cede; … … 142 217 last GUARD if $is_finish =~ m/Terminated/; 143 218 } 144 delete $scheduled{$job_id}; 219 220 my $msg = sprintf "end job %${job_name_maxlen}s / %i at %s\n", 221 $scheduled{$job_id}->{name}, $job_id, time; 222 223 # Job non finish, just suspend if received checkpoint signal 224 $msg =~ s/^end\s+job/suspend job/ 225 if $sig_transmit and $oar_checkpoint->count() > 0; 226 227 $log_h->print($msg) if $logtrace; 228 print($msg) if $verbose; 229 145 230 $job_active->down; 146 231 $job_todo->down; 232 delete $scheduled{$job_id}; 147 233 } $job_id; 148 234 }
Note: See TracChangeset
for help on using the changeset viewer.