2014-07-01 17 views
8

Tôi đang cố gắng lấy giá trị từ một tệp khác và sử dụng nó trong tập lệnh gửi SLURM. Tuy nhiên, tôi nhận được một lỗi rằng giá trị không phải là số, nói cách khác, nó không bị bỏ qua.Sử dụng biến Bash trong kịch bản lệnh sbatch SLURM

Đây là kịch bản:

#!/bin/bash 
# This reads out the number of procs based on the decomposeParDict                       
numProcs=`awk '/numberOfSubdomains/ {print $2}' ./meshModel/decomposeParDict` 
echo "NumProcs = $numProcs" 

#SBATCH --job-name=SnappyHexMesh                                
#SBATCH --output=./logs/SnappyHexMesh.log                             
#                                       
#SBATCH --ntasks=`$numProcs`                                 
#SBATCH --time=240:00                                  
#SBATCH --mem-per-cpu=4000                                 

#First run blockMesh                                   
blockMesh 

#Now decompose the mesh                                  
decomposePar 

#Now run snappy in parallel                                 
mpirun -np $numProcs snappyHexMesh -parallel -overwrite 

Khi tôi chạy như một kịch bản Bash shell bình thường, nó in ra số lượng procs một cách chính xác và làm cho đúng mpirun gọi. Do đó lệnh awk phân tích số lượng procs một cách chính xác và biến bị hủy tham chiếu như mong đợi.

Tuy nhiên, khi tôi gửi này để SLURM sử dụng:

sbatch myScript.sh 

tôi nhận được lỗi:

sbatch: error: Invalid numeric value "`$numProcs`" for number of tasks. 

bất cứ ai có thể giúp với điều này?

+0

Không sử dụng dấu gạch chéo ngược bên trong tập lệnh. Sử dụng một cái khác như '$ (...)' –

Trả lời

6

Điều này sẽ không hoạt động. Chuyện gì xảy ra khi bạn chạy

sbatch myscript.sh

là slurm phân tích các kịch bản cho các dòng #SBATCH đặc biệt, tạo ra một kỷ lục công việc, lưu trữ các tập lệnh batch nơi nào đó. Kịch bản lệnh batch chỉ được thực hiện sau khi công việc chạy.

Vì vậy, bạn cần cấu trúc quy trình làm việc theo cách hơi khác, và trước tiên hãy tính số lượng procs bạn cần trước khi gửi công việc. Lưu ý rằng bạn có thể sử dụng một cái gì đó giống như

sbatch -n $numProcs myscript.sh

, bạn không cần phải autogenerate kịch bản (còn, mpirun sẽ có thể để có được số lượng procs trong phân bổ một cách tự động, không cần phải sử dụng "- np ").

+0

Vâng, đó là giải pháp. Tôi sử dụng tập lệnh "phụ" để gửi tập lệnh công việc của mình. Cảm ơn @Janneb –

Các vấn đề liên quan