我有一個工作腳本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
被允許運行jobscripts,因爲當我手動調用jobscript時,它工作正常。有沒有辦法完成我想要做的事情?
下面是一個更詳細的過程示例。首先我所說的第一jobscript與-v
指定一個變量:
qsub -v outpath='/home/dest_folder/' compile.pbs
這outpath
變量只是指定了複製新的可執行文件,然後第二jobscript變化到輸出目錄,並嘗試運行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 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
應該如何設置JOB0.walltime,即提交腳本的walltime? JOB0.walltime = JOB1.walltime + JOB2.walltime? JOB0.walltime = error_margin(JOB1.walltime + JOB2.walltime),其中1
TomRoche