我有一个作业脚本compile.pbs,它运行在一个CPU上,并编译源代码来创建一个可执行文件。然后,我有了第二个作业脚本jobscript.pbs,我称之为使用32个CPU来使用MPI运行新创建的可执行文件。当我连续手动调用它们时,它们都很好地工作,但是我想让第一个脚本在第二个作业脚本结束之前调用它来自动化这个过程。是否有适当嵌套qsub调用或连续调用qsub调用的方法?
目前,我的尝试是让第一个脚本在第二个脚本结束之前调用它,但是当我尝试从第二个(嵌套)qsub得到一个奇怪的错误消息时:
qsub: Bad UID for job execution MSG=ruserok failed validating masterhd/masterhd from s59-16.local我认为第二个脚本被正确地调用了,但是权限可能与我调用原始脚本时的权限不一样。显然,我的用户名masterhd允许运行作业脚本,因为当我手动调用作业脚本时,它可以正常工作。有什么办法来完成我想做的事吗?
下面是这个过程的一个更详细的例子。首先,我调用第一个作业脚本并使用-v指定一个变量
qsub -v outpath='/home/dest_folder/' compile.pbs该outpath变量只指定在何处复制新的可执行文件,然后第二个作业脚本更改到该输出目录并尝试运行jobscript.pbs。
compile.pbs:
#!/bin/bash
#PBS -N compile
#PBS -l walltime=0:05:00
#PBS -j oe
#PBS -o ocompile.txt
#Perform compiling stuff:
module load gcc-openmpi-1.2.7
rm *.o
make -f Makefile
#Copy the executable to the destination:
cp visct ${outpath}/visct
#Change to the output path before calling the next jobscript:
cd ${outpath}
qsub jobscriptjobscript.pbs:
#!/bin/bash
#PBS -N run_exe
#PBS -l nodes=32
#PBS -l walltime=96:00:00
#PBS -j oe
#PBS -o results.txt
cd $PBS_O_WORKDIR
module load gcc-openmpi-1.2.7
time mpiexec visct发布于 2013-07-21 15:22:54
您可以创建一个提交脚本,该脚本对两个作业都进行qsubs,但是只有在第一个作业完成之后才执行第二个作业,而没有出现错误:
JOB1CMD="qsub -v outpath='/home/dest_folder/' compile.pbs -t" # -t for terse output
JOB1OUT=$(eval $JOB1CMD)
JOB1ID=${JOB1OUT%%.*} # parse to get job id, change accordingly
JOB2CMD="qsub jobscript.pbs -W depend=afterok:$JOB1ID"
eval $JOB2CMD发布于 2013-07-21 11:24:26
您的系统有可能在脚本中运行脚本。你的第一份工作只运行5分钟,然后第二份工作需要96小时。如果在第一个作业中请求第二个作业,这将违反第一个作业的时间限制。
为什么不能将编译部分放在第二个脚本的开头呢?
https://stackoverflow.com/questions/17765510
复制相似问题