سؤال

كيف يمكنني تحديد برنامج نصي 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top