Linux_前一个投的任务跑完再跑另一个任务_qsub_-hold_jid
perl program_1.pl input_1.file output_1.file
perl program_2.pl output_1.file output_2.file
像这样的情况,第一个任务的输出是第二个任务的输入,第二个任务必须等第一个任务跑完了再跑。
设想了一个方法:
得到perl program_1.pl的PID,假设是123
num=123
获得当前用户在运行的程序
data=`ps u`
下面是data的内容
1 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
2 admin 123 0.0 0.0 68280 1652 pts/37 Ss 11:19 0:00 program_1.pl
3 admin 120 0.0 0.0 65600 944 pts/37 R+ 11:26 0:00 ps u
4 admin 121 0.0 0.0 63588 828 pts/37 S+ 11:26 0:00 less -SN
通过PID判断program_1.pl是否还在运行
if [[ "$data" =~ "$num" ]]
then
JUDGE="TRUE"
fi
echo ${JUDGE-"FALSE"}
上面这个方法好麻烦,所以用了另一个方法:
qsub -cwd -l vf=1g run_program_1.sh o>run_program_1.jid
这样就得到了program_1在节点跑的jid
id=`perl -n -e '/(\d+)/ && print $1 ' run_program_1.jid`
qsub -cwd -l vf=1g -hold_jid $id run_program_2.sh o>run_program_2.jid
同理还可以有program_3,4,5,6……