2014-07-01 10 views
8

के भीतर बैश वैरिएबल का उपयोग करें, मैं किसी अन्य फ़ाइल से एक मान प्राप्त करने का प्रयास कर रहा हूं और इसे SLURM सबमिशन स्क्रिप्ट के भीतर उपयोग कर रहा हूं। हालांकि, मुझे एक त्रुटि मिलती है कि मान गैर-संख्यात्मक है, दूसरे शब्दों में, इसे संदर्भित नहीं किया जा रहा है।SLURM sbatch स्क्रिप्ट

#!/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 

जब मैं यह एक सामान्य बैश खोल स्क्रिप्ट के रूप में चलाने के लिए, इसे बाहर procs की संख्या सही ढंग से प्रिंट और सही mpirun कॉल करता है:

यहाँ स्क्रिप्ट है। इस प्रकार awk कमांड procs की संख्या को सही ढंग से पार करता है और चर के रूप में चर के रूप में संदर्भित किया जाता है।

हालांकि, जब मैं का उपयोग कर SLURM को यह सबमिट करें:

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

किसी को भी इस के साथ मदद कर सकते हैं:

sbatch myScript.sh 

मैं त्रुटि मिलती है?

+0

किसी स्क्रिप्ट के अंदर बैकटिक्स का उपयोग न करें। '$ (...)' –

उत्तर

6

यह काम नहीं करेगा। जब आप चलाने

sbatch myscript.sh

कि slurm उन विशेष #SBATCH लाइनों के लिए स्क्रिप्ट को पार्स करता है, एक काम रिकॉर्ड उत्पन्न करता है, कहीं न कहीं बैच स्क्रिप्ट संग्रहीत करता है तो क्या होता है। बैच स्क्रिप्ट केवल तब ही निष्पादित की जाती है जब नौकरी चलती है।

तो आपको कार्यप्रवाह को थोड़ा अलग तरीके से ढांचे की आवश्यकता है, और पहले नौकरी जमा करने से पहले आपको आवश्यक प्रोसेस की संख्या की गणना करें। ध्यान दें कि आप की तरह

sbatch -n $numProcs myscript.sh

कुछ का उपयोग कर सकते हैं, तो आप स्क्रिप्ट autogenerate की जरूरत नहीं है (यह भी, mpirun स्वचालित रूप से आपके आवंटन में procs की संख्या प्राप्त करने में सक्षम होना चाहिए, उपयोग करने के लिए "कोई जरूरत नहीं - एनपी ")।

+0

जैसे किसी एक का उपयोग करें हां, यह समाधान है। मैं अपनी नौकरी स्क्रिप्ट जमा करने के लिए "उप" स्क्रिप्ट का उपयोग करता हूं। धन्यवाद @ जेनब –