#!/usr/bin/perl
use strict ;
use warnings ;
my $curdir = $ENV{PWD};
print("% current dir is : $curdir \n");
##更改运行文件夹;
chdir('./01_mbist_insertion');
##提交名为run_mbist_insertion的脚本任务,等待其完成后,更改目录,执行下一个任务;
submit_and_wait("./run_mbist_insertion");
chdir("../02_edt_gen");
submit_and_wait("./run_edt_insertion");
chdir("../03_scan_insertion");
fork_a_tab("bsub -q short ./run_scan_insertion");
#submit and wait the job done;
sub submit_and_wait {
my $command = shift;
print "$command\n";
my $job = `bsub -q short $command`;
print "$job\n" ;
chomp $job;
my ($job_id) = $job =~ /\<(\d+)\>/;
print " already submit the job: $job_id\n";
my $status = '';
while ($status ne 'DONE' && $status ne 'EXIT') {
sleep (59);
$status = `bjobs -noheader -o 'stat' sjob id`;
#print "wating for $job_id finish...\n"
chomp $status;
]
if ($status eq 'DONE' ){
print "job $job_ id finished ... \n";
}
if ($status eq 'EXIT' ){
print "job $job_id exit because error ... \n";
exit 0;
}
}
# open new tab to running a specialty job „note! must use with waitpid;
sub fork_a_tab {
my $commond = shift;
my $pid = fork();
if ($pid == 0) {
print ("opening new tab... \n");
sleep (2);
##根据集群所使用的gui最修改
exec ("mate-terminal --tab -t $commond -- csh -c '$commond;csh'");
}
waitpid($pid,0);
}
在单机上执行的版本(无集群)
#!/usr/bin/perl
use strict;
use warnings;
chdir("./workspace");
run_to_finish('./job.tcl','job_end');
## 需要在所执行的脚本的末尾添加创建temp文件的命令
#set tempfile [open $tempfilepath w]
# Close the file
#close $tempfile
sub run_to_finish {
my($tcl_name,$temp_file) = @_;
my $pid = fork();
if ($pid == 0) {
print("opening a new tab ... \n");
exec("gnome-terminal --tab -- csh -c '$tcl_name;csh'");
}
print("waiting the job finish ... \n");
while(!-e $temp_file) {
sleep(60); # 每60秒 检查一次任务是否完成;
}
if(-e $temp_file) {
unlink $temp_file or die "could not delete the file $temp_file !! \n";
print("the job $tcl_name was finished ...\n");
waitpid($pid,0);
}