私は最近Linuxの使い方を学び始めました。クラスタでシリアルジョブを実行するためにbashシェルにスクリプトを作成したいと思います。私はそのようなスクリプトを書く方法に関するヒントと指示を探していました。私は次のように書くことができました:
#!/bin/bash
#PBS -l nodes=1:ppn=8
#PBS -l walltime=1:00:00
#PBS -e test.err
#PBS -o test.log
cd /home/myuser/
echo "Running on host `hostname`"
echo "Time is `date`"
echo "Directory is `pwd`"
/home/myuser/comsol4.3b/bin/comsol batch -inputfile DF.mph -outputfile output.mph -batchlog out.log
最後の行は実行するプログラム(COMSOLと呼ばれる)を呼び出します。私のコードで欠けているものの1つは "qsub"コマンドです。このコマンドをコードの残りのコマンドとマージする方法がわかりません。 "qsub"コマンドで私が使用しているプログラムを呼び出す行を変更する方法を案内できる人はいますか?
私の質問はとても簡単で申し訳ありません。問題を解決しようとして多くの時間を費やしましたが、残念ながらそれはできません。
編集する:整理すると、コードの最後の行だけを入力するとマスターノードでのみ実行されますが、これは望ましくありません。 PBS行を使用して割り当てられたリソースを使用するようにコードの最後の行を変更したいと思います。どうすればいいですか?
記録によると、このコマンドにはqhost
250個のノードがあり、各ノードのコア数は4コア/ノードから16コア/ノードの範囲で表示されます。
答え1
どのクラスタリングソフトウェアを使用しているかを指定していませんが、要求した事実によれば、qsub
GridEngine(およびその派生物)とPBSの両方がその特定のコマンドを使用していることを知っているので、そのコマンドから始めましょう。
私はGridEngine(およびその派生)に最も慣れているので、そのパッケージを使用してコマンドを送信するには、同様のことを行う必要があります。
はい以下はサンプルスクリプトです。これをと呼びますsample.bash
。
#!/bin/bash
echo "Working directory is $PWD"
このスクリプトを送信するには、次の手順を実行する必要があります。
$ qsub sample.bash
クラスタ内の特定のノードをターゲットにするには、GridEngine予約ソフトウェアがノードの1つを選択してそのいずれかでジョブを実行できるように、ノードに固有の属性セットを含める必要があります。