Sun N1 Grid Engine 6.1 ユーザーズガイド

バッチジョブの発行

次の節では、Grid Engine システムでより複雑なジョブを発行する方法について説明します。

シェルスクリプトについて

バッチジョブとも呼ばれるシェルスクリプトは、ファイル内でアセンブルされる一連のコマンド行命令です。スクリプトファイルは、 chmod コマンドによって実行可能になります。スクリプトを呼び出すと、コマンドインタプリタが起動されます。各命令は、スクリプトを実行するユーザーが手で入力しているかのように解釈されます。一般的なコマンドインタプリタには、cshtcsh sh、または ksh があります。シェルスクリプト内からは、任意のコマンド、アプリケーション、およびその他のシェルスクリプトを呼び出すことができます。

コマンドインタプリタは、ログインシェルとして呼び出すことができます。このためには、ジョブを実行している特定のホストおよびキューに対して有効な Grid Engine システムの構成の login_shells リストに該当コマンドインタプリタの名前を含める必要があります。


注 –

Grid Engine システムの構成は、クラスタ内のさまざまなホストやキューによって異なる場合があります。有効な構成は、qconf コマンドの -sconf オプションと -sq オプションで表示できます。詳細は、qconf(1) のマニュアルページを参照してください。


コマンドインタプリタをログインシェルとして呼び出すと、ジョブの環境はスクリプトにログインして実行した場合と同じになります。たとえば、csh を使用すると、/etc/login などのシステムのデフォルト起動リソースファイル以外に .login.cshrc が実行されます。一方、cshlogin-shell として呼び出さなかった場合は、.cshrc だけが実行されます。login-shell として呼び出す場合と呼び出さない場合の違いについては、お使いのコマンドインタプリタのマニュアルページを参照してください。

シェルスクリプトの例

例 3–1 に単純なシェルスクリプトを示します。このスクリプトは、まずアプリケーション flow を Fortran77 ソースからコンパイルしたあと、このアプリケーションを実行します。


例 3–1 単純なシェルスクリプト


#!/bin/csh
# N1 Grid Engine 6.1 にある FORTRAN プログラムのサンプルを 
#  コンパイルし、実行するスクリプトファイルの例
cd TEST
# プログラム "flow.f" をコンパイルし、実行可能な "flow" を
# ファイル名として命名する必要がある。
f77 flow.f -o flow

ローカルシステムのユーザーズガイドには、シェルスクリプトの作成とカスタマイズに関する詳細情報が記載されています。shkshcsh または tcsh のマニュアルページも参照してください。以降の節では、Grid Engine システム用のバッチスクリプトの作成時に、特に考慮すべき事柄を重点的に説明します。

一般的に、コマンドプロンプトから手動で実行できるすべてのシェルスクリプトは、Grid Engine システムに発行できます。 このシェルスクリプトは、端末接続や対話形式のユーザー介入を必要としてはなりません。ただし、自動的にリダイレクトされる標準エラーと標準出力デバイスは例外です。したがって、例 3–1 では Grid Engine システムへの発行準備が整っており、スクリプトは指定の処理を行います。

通常のシェルスクリプトの拡張

通常のシェルスクリプトを拡張すると、Grid Engine システムの制御下で実行されるスクリプトの動作に影響が出る場合があります。次の節では、これらの拡張機能について説明します。

コマンドインタプリタの選択方法

図 3–5 に示すように、発行時には、ジョブスクリプトファイルの処理に使用するコマンドインタプリタを指定できます。何も指定しなかった場合、コマンドインタプリタの選択方法は構成変数 shell_start_mode によって決められます。

出力のリダイレクト

バッチジョブには端末接続がないため、標準出力と標準エラー出力はファイルにリダイレクトしなければなりません。Grid Engine システムでは、出力のリダイレクト先となるファイルの場所を定義できます。出力ファイルが指定されていない場合は、デフォルトが使用されます。

ファイルの標準的な場所は、ジョブが実行される現在の作業ディレクトリです。デフォルトの標準出力ファイル名は job-name.o job-id で、デフォルトの標準エラーの出力先は job-name>.ejob-id にリダイレクトされます。job-name はスクリプトファイル名から作成するか、ユーザーが定義できます。たとえば、submit(1) のマニュアルページの -N オプションを参照してください。job-id は、Grid Engine システムによってジョブに割り当てられる一意の識別子です。

配列ジョブのタスクの場合 、タスクの識別子はドットで区切られて、これらのファイル名に追加されます。リダイレクト後の標準出力先パスは、 job-name.ojob-id.task-id> job-name.e job-id.task-id になります。詳細は、「配列ジョブの発行」を参照してください。

標準の場所が適切でない場合は、 図 3–6 のように、QMON で出力先を指定できます。また、qsub コマンドの -e-o オプションを使用して、出力先を指定することもできます。標準出力と標準エラー出力は、1 つのファイルにマージすることもできます。リダイレクトは、実行ホストごとに指定できます。その場合、ジョブが実行されるホストによって、出力するリダイレクトファイルの場所は異なります。一意のカスタマイズリダイレクトファイルパスを作成するには、qsub -e および -o オプションと一緒に使用できるダミー環境変数を使用します。次にこれらの変数の一覧を示します。

ジョブを実行すると、これらの変数に実際の値が入り、その値でリダイレクトパスが作成されます。

詳細は、qsub(1) のマニュアルページを参照してください。

有効なコメント

シェルスクリプトでは、ハッシュ記号 (#) が最初にある行はコメントとして扱われます。 ただし、Grid Engine システムは特別なコメント行を認識し、それらの行を特別な方法で使用します。そのような特別なコメントスクリプト行は、qsub コマンドのコマンド行引数リストの一部として扱われます。これらの特別なコメント行内で指定される qsub オプションも「QMON Submit Job」ダイアログボックスで解釈されます。スクリプトファイルを選択すると、対応するパラメータがプリセットされます。

デフォルトでは、特別なコメント行は #$ という接頭辞で識別されます。接頭辞は、 qsub -C コマンドで再定義できます。

このような特別なコメントの使用は、発行引数のスクリプト組み込みと呼ばれます。次に、スクリプト組み込みコマンド行オプションを利用したスクリプトファイルの例を示します。


例 3–2 スクリプト組み込みコマンド行オプションの使用


#!/bin/csh

# Grid Engine のデフォルトのシェルでなければ 
# csh を強制

#$ -S /bin/csh

# これは N1 Grid Engine 6.1 の元でサンプルの FORTRAN プログラムを
# コンパイルし、実行するスクリプトファイルの例です。
# Grid Engine に、ジョブの開始時と終了時に 
# メールを送信させるように
# します。

#$ -M EmailAddress
#$ -m b,e

# 標準出力と標準エラーのためのファイルを
# 命名します。

#$ -o flow.out -j y

# ファイルがあるディレクトリに変更します。

cd TEST

# プログラム "flow.f" をコンパイルし、
# 実行可能な "flow" と命名する必要があります。

f77 flow.f -o flow

# コンパイルを完了すると、そのプログラムを実行できます。

flow

環境変数

ジョブが実行されると、いくつかの変数がジョブの 環境にプリセットされます。