المعلمة لنصوص shell التي بدأت مع QSUB
-
29-09-2019 - |
سؤال
كيف يمكنني تحديد برنامج نصي shell يتم تنفيذه على شبكة (بدأ مع QSUB)؟ لديّ برنامج نصي Shell ، حيث أستخدم GetOpts لقراءة المعلمات.
عندما أبدأ (qsub script.sh -r firstparam -s secondparam ..) هذا البرنامج النصي العام
QSub: خيار غير صالح - S
QSub: قيمة غير قانونية
كما يعتقد QSub أن المعلمة هي لنفسها. ومع ذلك لم أجد أي حل.
شكرًا
المحلول 3
لقد اكتشفت للتو كيفية حلها: ما عليك سوى طباعة أوامر SHELL SCRIP مع Echo وأنبوب النتيجة إلى QSUB:
echo "./script.sh var1=13 var2=24" | qsub
نصائح أخرى
استخدام خيار QSUB -V هو الطريقة الصحيحة:
qsub -v par_name=par_value[,par_name=par_value...] script.sh
يمكن استخدام par_name كمتغير في البرنامج النصي shell.
بالإضافة إلى إجابة Volk ، للإشارة إلى المتغيرات في القائمة (المعينة بواسطة -V) ، يمكنك ببساطة استخدام الاسم الذي تحدده في مكالمتك. لذلك ، قل أنك قمت بإجراء مكالمة إلى QSUB على النحو التالي
qsub -v foo='qux' myRunScript.sh
ثم myRunScript.sh
يمكن أن تبدو مثل هذا:
#!/bin/bash
#PBS -l nodes=1:ppn=16,walltime=0:00:59
#PBS -l mem=62000mb
#PBS -m abe
bar=${foo}
echo "${bar}"
حيث سيكون الإخراج
qux
أتمنى أن يساعدك هذا!
هناك طريقة افضل...
أنا مندهش حقًا من المدة التي قضاها هذا السؤال دون إجابة جيدة. قد يكون الإصدار المحدد من qsub
لم يحدد. qsub
موجود في عزم الدوران على الأقل وأيضًا محرك شبكة الشمس ، وربما جدولين آخرين. لذلك ، من المهم معرفة ما الذي تستخدمه. سأتحدث عن عدد قليل هنا:
عزم الدوران: qsub -F <arguments> command
صفحة الرجل
إليك مثال على كيفية استخدامه عادة. بدءًا من هذا النص النصي الذي يردد أي وسيطات تنتقل إليها:
$ cat testArgs.pbs
#!/usr/bin/env bash
echo $@
أود أن أقدم الوظيفة مثل هذا:
$ qsub -F "--here are the --args" testArgs.pbs
3883919.pnap-mgt1.cm.cluster
وهذا ما يبدو عليه ملف الإخراج بعد تشغيله:
$ cat testArgs.pbs.o3883919
--here are the --args
محرك شبكة الشمس: qsub command [ command_args ]
صفحة الرجل
يمكنك فقط إضافة الوسائط بعد الأمر ، كما تفعل عند التنفيذ في القشرة. ليس لدي SGE يعمل في أي مكان ، لذلك لا يوجد مثال على هذا. لكنه نفس الشيء مع slurm ، وهو أدناه
Slurm: sbatch command [ command_args ]
صفحة الرجل
هنا أقدم نفس البرنامج النصي الذي استخدمته مع مثال عزم الدوران أعلاه:
$ sbatch testArgs.sh what the heck
Submitted batch job 104331
والنتائج:
$ cat slurm-104331.out
what the heck
تصدير متغيرات البيئة! = تمرير الحجج
تختلف متغيرات تصدير البيئة تمامًا عن نقل الوسائط إلى أمر.
هنا مناقشة جيدة حول الاختلافات.
ال qsub
توصي الإجابات قبل كل شيء -v
. أن تكون واضحا ، -v
تصدير متغيرات البيئة ، -F
ينقل الحجج إلى الأمر.
أفضّل عمومًا تحديد البرامج النصية الخاصة بي من خلال السماح بالحجج. في الواقع ، أود أن أقول أنه من الأكثر شيوعًا استخدام البرامج النصية مثل هذا process_data.sh --threads 8
من فعل شيء مثل export THREADS=8; process_data.sh
.