linux - 扭矩嵌套/连续 qsub 调用

标签 linux mpi cluster-computing qsub torque

我有一个作业脚本 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

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

最佳答案

您可以制作一个提交脚本来 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

关于linux - 扭矩嵌套/连续 qsub 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765510/

相关文章:

c - union 在 Linux 进程描述符中的用法

linux - XGrabKey 不工作

c++ - MPI:为什么我在下一个例子中使用 MPI_Barrier 时出现错误?

可以有超过 1 个进程使用 MPI_Scatter 吗?

node.js - 如何处理集群中基于时间的事件?

java - wildfly 集群上的 Websocket 问题

Python 请求 - 限制带宽使用

fortran - 如何以可移植的方式保持 Fortran MPI 程序的精度?

ubuntu - 如何使用 qdel all 只删除空闲作业

php - 获取系统启动时间(不读取/proc/uptime)