我有一个compile.pbs
在单个 CPU 上运行并编译源代码以创建可执行文件的作业脚本。然后我有一个第二个作业脚本jobscript.pbs
,我使用 32 个 CPU 调用它来使用 MPI 运行新创建的可执行文件。当我连续手动调用它们时,它们都可以完美地工作,但我想通过让第一个脚本在它结束之前调用第二个作业脚本来自动化这个过程。有没有办法正确嵌套 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
.
编译.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 jobscript
作业脚本.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