実行したジョブの情報(経過時間やメモリ使用量)を取得したい
SQUIDでは、acstatコマンドを使って過去に実行したジョブの経過時間を取得可能です。メモリ使用量については取得できませんので、以下のお問い合わせフォームからご連絡くださいませ。
OCTOPUSについては、経過時間・メモリ使用量ともに取得できません。同じく、以下のお問い合わせフォームからご連絡くださいませ。
お問い合わせフォーム
SQUIDでは、acstatコマンドを使って過去に実行したジョブの経過時間を取得可能です。メモリ使用量については取得できませんので、以下のお問い合わせフォームからご連絡くださいませ。
OCTOPUSについては、経過時間・メモリ使用量ともに取得できません。同じく、以下のお問い合わせフォームからご連絡くださいませ。
お問い合わせフォーム
SQUIDでは環境変数 $NQSII_MPIOPTS / $NQSV_MPIOPTによって、#PBS -l cpunum_jobで指定した値を元に、machinefileを自動生成しMPIに設定しています。ppn, rr, prehostといったオプションはmachinefileと同時に指定することが出来ないため、仮に128 MPIプロセス / 1ノードあたり64プロセス割り当てることを想定し、以下のように指定したとしても、ppn オプションは無効となります。
mpirun ${NQSV_MPIOPTS} -np 128 -ppn 64 ./a.out
基本的には以下のように指定いただくことで、128 MPIプロセスを生成し、1ノードあたり64プロセス割り当てることが可能です。
#PBS -l cpunum_job=64
(中略)
mpirun ${NQSV_MPIOPTS} -np 128 ./a.out
環境変数 $NQSV_MPIOPTS は、以下のオプションとファイルが指定されています。
-machinefile /var/opt/nec/nqsv/jsv/jobfile/[リクエストID等の数値]/mpinodes
mpinodesファイルはマシンファイルとなっており、上記の場合は以下のようなホスト名、コア数が指定されています。
host001:64
host002:64
ただし、より細かくプロセス配置を指定したい場合(例えばピニングを設定し特定のコアにプロセスを使用せずに計算する場合など)上記のオプションでは対応出来ないケースがあります。ppn, rr, prehostオプションを使用する場合は、環境変数 $NQSII_MPIOPTS / $NQSV_MPIOPT を指定する代わりにhostfileオプションと環境変数 $PBS_NODEFILE を指定してください。128 MPIプロセスを生成し、1ノードあたり64プロセス割り当てる場合は以下のように指定します。
mpirun -hostfile ${PBS_NODEFILE} -np 128 -ppn 64 ./a.out
※PBS_NODEFILEを使う場合、#PBS -l cpunum_jobで指定した値がMPIに設定されません。ご自身でプロセス数の確認をお願いします。また、OCTOPUSではご利用いただけません。
ワークフローにてA⇒Bの順序で制御しているときに、AがRERUNとなった場合、Aを再実行、Bは再スケジューリングされ、ワークフローの順番を保ったまま実行されます。
ファイル名に連続した数値が含まれている場合、パラメトリックジョブという投入方法で、一度に大量のジョブを投入できます。
パラメトリックジョブでは、ジョブスクリプト内の"$PBS_SUBREQNO"環境変数に、-tで指定した数値(下記の例では1から5までの数値)が格納されます。
qsubすると同時に5本のジョブが投入され、a.outに対してそれぞれ異なる入力ファイル(下記の例ではinput1からinput5)が設定されます。
ジョブスクリプト例
1 2 3 4 |
#PBS -q OCTOPUS #PBS -l elapstim_req=0:30:00,cpunum_job=24 cd $PBS_O_WORKDIR ./a.out input$PBS_SUBREQNO |
投入例
1 2 |
qsub -t 1-5 jobscript.sh |
qstatの表示例:パラメトリックジョブの場合、1回のqsubにつき1件分の表示となります
1 2 3 4 |
RequestID ReqName UserName Queue Pri STT S Memory CPU Elapse R H M Jobs --------------- -------- -------- -------- ---- --- - -------- -------- -------- - - - ---- 123456[].oct nqs username OC1C 0 QUE - - - - Y Y Y 1 |
sstatの表示例:-tで指定した数値分だけ表示されます
1 2 3 4 5 6 7 8 |
RequestID ReqName UserName Queue Pri STT PlannedStartTime --------------- -------- -------- -------- ----------------- --- ------------------- 123456[1].oct nqs username OC1C 0.5002/ 0.5002 QUE - 123456[2].oct nqs username OC1C 0.5002/ 0.5002 QUE - 123456[3].oct nqs username OC1C 0.5002/ 0.5002 QUE - 123456[4].oct nqs username OC1C 0.5002/ 0.5002 QUE - 123456[5].oct nqs username OC1C 0.5002/ 0.5002 QUE - |
OCTOPUSには以下のGnuplotがインストールされています。
Octaveから呼び出されるGnuplotのバージョンは、以下の2通りの方法で指定が可能です。
・呼び出したいバージョンのパスを設定する
1 2 3 4 5 6 |
#!/bin/bash #PBS -q OCTOPUS #PBS -l elapstim_req=1:00:00 export PATH=/octfs/apl/Gnuplot/5.2.4/bin:$PATH cd $PBS_O_WORKDIR /octfs/apl/Octave/5.1.0/bin/octave-5.1.0 file.m |
・Octaveの設定ファイル「.octaverc」を作成する
gnuplot_binary="[Gnuplotの実行ファイルのパス]"
上記のように記述することで、Octaveから呼び出されるデフォルトのGnuplotの実行ファイルを設定できます。
例えば、5.2.4を呼び出す場合は「gnuplot_binary="/octfs/apl/Gnuplot/5.2.4/bin"」と記述してください。
MPIプログラム実行時に${NQSII_MPIOPTS}を指定していなかった場合、以下のようなエラーが出力されます。
[mpiexec@oct-***] HYDT_bscd_pbs_query_node_list (../../tools/bootstrap/external/pbs_query_node_list.c:23): No PBS nodefile found
[mpiexec@oct-***] HYDT_bsci_query_node_list (../../tools/bootstrap/src/bsci_query_node_list.c:19): RMK returned error while querying node list
[mpiexec@oct-***] main (../../ui/mpich/mpiexec.c:621): unable to query the RMK for a node list
以下のページに、MPIプログラムを実行する際のジョブスクリプトの例を掲載しておりますので、まずご参照ください。
OCTOPUSでのintel MPI実行方法
エラーメッセージ自体は、MPIプログラムの"nodefile"(実行する計算ノードを指定する設定ファイル)が存在しないことを通知しています。OCTOPUSでは、${NQSII_MPIOPTS}を指定いただくことで、自動的に設定されます。
資源に空きがある限り、複数のジョブを同時に実行可能です。
qsub A.nqs
qsub B.nqs
といったように、1件1件個別にqsubしていくことで、A.nqsとB.nqsが同時に実行可能な状態となります。
MPI並列実行を行うプログラムで各プロセスが同名ファイルにデータを出力するよう記述していると、バイナリが書き込まれてしまう場合があります。
大規模計算機システムのような共有ファイルシステムにおいて各プロセスが同名のファイルにデータを出力することは、各プロセスが同一のファイルにデータを出力することと同じであるため、プロセス間で競合が発生した際にデータが破損してしまい、バイナリデータが書き込まれてしまうことがあります。各プロセスごとに別名のファイルに出力するか、MPI-IOというMPI用の入出力インターフェースを利用することで、プロセス間の競合を防ぐことが可能です。
MPI-IOについては下記をご覧ください。
MPIの実行結果を1つのファイルに出力したい
利用者単位、計算機単位でジョブの投入数上限を設定しており、いずれかの上限を超過していることによるエラーとなります。
基本的には、誤った利用方法による事故を防ぐ目的で設定しているものであり、利用を阻害するために設けているものではありませんので、本エラーを確認された場合は、以下までお知らせください。
お問い合わせフォーム
計算に使用するノードは、スケジューラ側が自動で最適なノードを割り当てるようになっており、利用者様の方では指定することはできません。
ご理解くださいませ。
コンパイル時に、OpenMPや自動並列化を使用するオプションを指定した場合、並列化指示行の有無に関わらず、「並列版ライブラリ」がリンクされます。「並列版ライブラリ」の関数(並列版の関数)には通常版ライブラリと比べて、排他制御のために他スレッドのリソースへのアクセスを制限する「ロック処理」が組み込まれています。
並列化指示行を挿入していない箇所で並列版の関数がコールされた場合、1スレッドで動作するので、実際にロック処理に伴う「他スレッドの処理待ち」が発生するわけではないのですが、例えば、「排他が必要かどうか」といった判定を行う都合で、わずかですが通常版ライブラリより処理時間が増えることとなります。
一回のオーバヘッドはわずかですが、大量にコールすると、処理時間に大きく影響することとなります。
ご注意ください。
MPIを用いた場合、通常は各プロセスごとに出力ファイルが生成されます。しかしMPI-IOを用いて出力先を指定することで、各プロセスの出力を1つのファイルにまとめることができます。
MPI-IOはMPIプログラミングを行うことを前提としています。MPIの基本的な利用方法やコマンドについてはこちらをご覧ください。
以下にfortranで書かれたプログラムを紹介します。こちらを参考に説明します。
各プロセスごとにプロセスID(rank)を取得し、output.datの任意の位置に出力するプログラムです。
たとえば自身のプロセスIDが4の場合、output.datの16-19バイト目(INTEGER換算で5番目)に自身のプロセスIDを書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
program sample include 'mpif.h' !! MPI用のインクルードファイル(必ず指定) integer ierr,myrank integer (kind=mpi_offset_kind) idisp call MPI_INIT(ierr) !! MPI並列 開始 call MPI_COMM_RANK(mpi_comm_world,myrank,ierr) !!プロセスID(rank)の取得 idisp=0+4*myrank call mpi_file_open(mpi_comm_world,'output.dat',mpi_mode_rdwr+mpi_mode_create,mpi_info_null,ifh,ierr) call mpi_file_set_view(ifh,idisp,mpi_integer,mpi_integer,'native',mpi_info_null,ierr) call mpi_file_write(ifh,myrank,1,mpi_integer,mpi_status_ignore,ierr) call mpi_file_close(ifh,ierr) call MPI_FINALIZE(ierr) !! MPI並列 ここまで stop end |
プログラムのハイライト部分(8行目-11行目)が、MPI-IOプログラムになります。また7行目は直接MPI-IOに関係があるわけではないですが、9行目でコマンドに引数として渡す変数を設定している部分になりますので、必要な処理になります。
2行目、6行目-7行目、13行目はMPIでの処理を行うためのプログラムです。こちらについてはMPI利用方法(VCC)のページで解説を行っていますのでそちらを参考にしてください。
以下で8行目-11行目のコマンドについて詳しく説明していきます。
MPI-IOでの入出力先のファイルをオープンするためのコマンドです。
MPI-IOを行う場合は最初にcallする必要があります。
引数 | |
---|---|
comm | コミュニケータを指定します。通常はMPI全プロセスをあらわす「MPI_COMM_WORLD」を指定することが多いです。 |
filename | 入出力先のファイル名を指定します。 |
amode | アクセスモードの設定をします。「|」をはさむことで複数同時に指定することが可能です。代表的なものをいくつか紹介します。 mpi_mode_rdonly:読み込みのみ可能 mpi_mode_wronly:書き込みのみ可能 mpi_mode_rdwr :読み書き両方可能 mpi_mode_create:filenameで指定した名前のファイルがない場合、自動で作成 mpi_mode_excl :filenameで指定した名前のファイルがすでに存在する場合、エラーを返す これ以外にも様々なモードが存在します。 |
info | 入出力先のファイル情報を設定できますが、基本的には何も渡さない「mpi_info_null」で問題ありません。 |
fh | ファイルハンドルです。これ以降filenameで指定したファイルは、fhで指定したファイルハンドルで指定することになります。 |
ierr | 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます。 |
各プロセスのファイルへの入出力開始地点(ポインタ)を指定するコマンドです。
ここでうまくポインタの指定ができていないと、出力結果に変に空白ができてしまったり、上書きが発生してしまったりします。
引数 | |
---|---|
fh | ファイルハンドルです。MPI_File_openで設定したファイルハンドルを指定します。 |
disp | ポインタのオフセット距離をバイト数で指定します。たとえばここで4を引数として渡した場合、5バイト目にポインタがセットされます。CHARACTER型は1文字1バイトのデータ型なので、この場合はファイルの先頭から4文字分のスペースが空いていることになります。またINTEGER型で考えると、通常は1つ4バイトのデータ型なのでINTEGER1つ分のスペースが空いていることになります。 |
etype | ファイルの基本単位を設定します。書き込む際のデータ型もしくはmpi_byteを指定します。 |
ftype | ファイルのひとまとまりの単位を設定します。各プロセスが複数回にわたって規則的に入出力を行う際などに利用するもので、決まった型だけでなくユーザーが独自に作ったものを設定することも可能です。各プロセスが入出力を1回しか行わない場合はetypeと同じものを設定しておきます。 |
datarep | データの表現方法を指定します。基本的にはバイナリ表現を表す「native」で問題ありません。 ※必ず小文字で指定してください。 |
info | 入出力先のファイル情報を設定できますが、基本的には何も渡さない「mpi_info_null」で問題ありません。 |
ierr | 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます |
実際にファイルに出力するためのコマンドです。
MPI_File_openでオープンしたファイルにMPI_File_set_viewで指定されたポインタから書き込み始めます。
引数 | |
---|---|
fh | ファイルハンドルです。MPI_File_openで設定したファイルハンドルを指定します。 |
buf | 実際に書き込む内容を設定します。 |
count | 書き込むデータの数(文字数ではない)を設定します。詳しくはdatatypeの欄で説明します。 |
datatype | 書き込むデータの型です。ここで設定したデータ型を、countで設定した数だけ出力します。 たとえばcharacter型で「hello」と書き込む場合はcountに5を、datatypeにmpi_characterを設定します。 またinteger型で「100」と書き込む場合はcountに1を、datatypeにmpi_integerを設定します。 これはcharacterが1つで1文字を表すデータ型であるのに対し、integerは1つで-2147483648~2147483647の範囲の整数を表すデータ型だからです。 |
status | 入出力先のファイルの通信に関する設定を行えますが、基本的には何も渡さない「mpi_status_ignore」で問題ありません。 |
ierr | 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます |
MPI-IOでの入出力先のファイルをクローズするためのコマンドです。
MPI-IOを行う場合は一連の処理の最後にcallする必要があります。
fh | ファイルハンドルです。MPI_File_openで設定したファイルハンドルを指定します。 |
ierr | 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます |
上記で作成したoutput.datからデータを読み込み、printで画面に表示するプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
program sample include 'mpif.h' !! MPI用のインクルードファイル(必ず指定) integer ierr,myrank,out integer (kind=mpi_offset_kind) idisp call MPI_INIT(ierr) !! MPI並列 開始 call MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr) idisp=0+4*myrank call mpi_file_open(mpi_comm_world,'output.dat',mpi_mode_rdwr+mpi_mode_create,mpi_info_null,ifh,ierr) call mpi_file_set_view(ifh,idisp,mpi_integer,mpi_integer,'native',mpi_info_null,ierr) call mpi_file_read(ifh,out,1,mpi_integer,mpi_status_ignore,ierr) call mpi_file_close(ifh,ierr) print '(I2)', out call MPI_FINALIZE(ierr) !! MPI並列 ここまで stop end |
プログラムのハイライト部分(8行目-11行目)が、MPI-IOプログラムになりますが、出力用のプログラムからmpi_file_writeがmpi_file_readに変わったのみでほぼ変化がありません。以下で新たに使用しているmpi_file_readについて解説します。
ファイルから読み込むためのコマンドです。
MPI_File_openでオープンしたファイルのMPI_File_set_viewで指定されたポインタからデータを読み込みます。
引数 | |
---|---|
fh | ファイルハンドルです。MPI_File_openで設定したファイルハンドルを指定します。 |
buf | 読み込んだデータが格納されます。 |
count | 読み込むデータの数を設定します。writeのときと同様に文字数ではないという点に注意してください。 |
datatype | 読み込むデータの型です。ここで設定した型で、countで設定した数だけ読み込みます。 |
status | 入出力先のファイルの通信に関する設定を行えますが、基本的には何も渡さない「mpi_status_ignore」で問題ありません。 |
ierr | 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます |
MPI-IOを用いて出力されたファイルは通常のreadコマンドでも読み込むことができます。mpi_file_readコマンドは本来、各プロセスにファイルの別々の箇所を読み込ませ、それぞれに並列作業を行わせるためのコマンドですので、MPI-IOによる出力結果をただ読み込むだけならば通常のreadコマンドを用いてデータの読み込みを行います。
上記同様output.datからデータを読み込み、printで画面に出力するプログラムです。
1 2 3 4 5 6 7 |
program sample integer iwrk(20) open(10,file='output.dat',access='direct',recl=4,FORM='BINARY') read(10,rec=1) iwrk close(10) print '(I2)', iwrk end |
ご覧のとおりMPI化を行っていないシリアル実行のプログラムですので、コンパイルやスクリプトでのジョブ投入の記述に誤ってMPI用のコマンドを使わないように注意してください。
上記と同じプログラムをC言語で記述したものも参考までに掲載します。関数はfortran版とほぼ同じですので、説明は省略します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <stdio.h> #include <mpi.h> main(int argc, char * argv[]) { int my_rank; MPI_File fh; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); int idisp = 4*my_rank; MPI_File_open(MPI_COMM_WORLD, "output.dat", MPI_MODE_RDWR | MPI_MODE_CREATE, MPI_INFO_NULL, &fh); MPI_File_set_view(fh, idisp, MPI_INT, MPI_INT, "native", MPI_INFO_NULL); MPI_File_write(fh, &my_rank, 1, MPI_INT, MPI_STATUS_IGNORE); MPI_File_close(&fh); MPI_Finalize(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdio.h> #include <mpi.h> main(int argc, char * argv[]) { int my_rank, i, out; MPI_File fh; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); int idisp = 4*my_rank; MPI_File_open(MPI_COMM_WORLD, "output.dat", MPI_MODE_RDWR | MPI_MODE_CREATE, MPI_INFO_NULL, &fh); MPI_File_set_view(fh, idisp, MPI_INT, MPI_INT, "native", MPI_INFO_NULL); MPI_File_read(fh, &out, 1, MPI_INT, MPI_STATUS_IGNORE); MPI_File_close(&fh); printf("%d\n", out); MPI_Finalize(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> int main(void) { FILE *fp; char *name = "output.dat"; int c[20]; int i; fp = fopen(name, "rb"); fread(&c, sizeof(int), 20, fp); fclose(fp); for(i=0; i<20; i++) printf("%d\n", c[i]); return 0; } |
標準出力ファイル、標準エラー出力ファイルは、umaskコマンドで指定したパーミッションに従い、出力されます。フロントエンド上でumaskコマンドを実行し、指定してください。
承ください。
qstatやsstatコマンドは実行中にライセンスを消費します。
平常利用においては、十分なライセンスを確保しておりますが、短い周期で定期実行されますと、ライセンスが不足し、他の利用者が利用できない状態に陥る可能性があります。
定期的な実行はできるだけお控えいただき、もしどうしても必要ということでしたら10分周期程度でご利用いただきますよう、よろしくお願いいたします。
システムを利用中の方については、センター側でデータを削除することはありません。
「ディスク容量の超過」についてですが、ディスクの容量は、基本的に「quota」という、Linuxのグループやユーザ毎にディスクを割り当てる機能を使っております。「quota」で決められた容量を超過しそうな場合は、対象の領域(この場合ext領域)について、新規のディスク書き込みができない状態になります。閲覧・削除等は可能です。
新規のディスク書き込みが出来なくなりますので、Writeを行うようなジョブは全てエラーとなってしまいます。ご注意ください。
申し込み時期にかかわらず、年度末までとなります。翌年度もご利用いただく場合は、継続申請時にディスク容量追加の申請が必要となります。
申請代表者様は、その申請枠内(同一グループ内)で利用者を追加登録することができます。
詳細については下記をご参照くださいませ。
利用者様の方で、ご自身のディスク領域に対して、特定のライブラリやアプリケーションをインストールされる場合、許可は不要です。(管理者権限を要しない場合は、許可不要です。)
センター側でのインストールを希望する場合は、下記のお問い合わせフォームよりご連絡くださいませ。(管理者権限を要する場合は、ご連絡ください。)
お問い合わせフォーム
ライブラリやアプリケーションの内容によっては、お断りする場合や、利用者様自身でのインストールをお願いする場合がございます。あらかじめご了承くださいませ。
ワークフロー実行機能あるいはリクエスト連携機能を使用することで可能です。
ワークフロー実行についての詳細は下記マニュアルの7.ワークフローをご参照くださいませ。
リクエスト連携機能については下記マニュアルの1.2.22. リクエスト連携機能をご参照くださいませ。
NQS利用の手引き
リクエスト連携機能とではアサインされるタイミングが異なります。ワークフローの場合、投入後すぐに全リクエストがアサイン対象になりますが、リクエスト連携機能の場合、前のリクエストの実行が完了した時点でアサインされます。そのため、混んでいる場合にはワークフローの方が早く実行される可能性があります。
プライマリセンターから発行されるアカウントです。HPCIが提供するシングルサインオンを行う際に必要となります。
大阪大学サイバーメディアセンターをプライマリセンターに指定している場合は、利用者番号という形でお知らせしております。
資源提供機関(利用する計算機を運用する機関)から発行されるアカウントです。計算機を利用する際に必要になるアカウントになります。
(HPCIアカウントを使ったシングルサインオンでも計算機を利用可能です)
大阪大学サイバーメディアセンターの計算機を使用する場合は、利用者番号という形でお知らせしております。
これらについての詳細は下記のページをご参照ください。
HPCIポータルサイト
下記の場合、HPCIアカウントとローカルアカウントは同じものを割り当てます。ご注意くださいませ。
プライマリセンター:大阪大学サイバーメディアセンター
資源提供機関:大阪大学サイバーメディアセンター
ほぼ全ての環境変数は、#PBS -v によってMPIスレーブノードに対しても指定することができますが、いくつかの環境変数はスケジューラNQSIIの標準機能(#PBS -v)で指定することが出来ません。PATHもその一つになります。指定できない環境変数については下記マニュアルの1.16 qsub(1)をご参照ください。
NQSII 利用の手引き(OCTOPUS)
NQSV 利用の手引き(SQUID)
MPI実行時オプションをご利用いただくことで、これらの環境変数をスレーブノードに対して設定することが可能です。
多くの擬似乱数生成関数は指定した初期値(random seed)に対して、ある一定の規則に基づいた処理を行い、乱数を生成します。同じ初期値を与えた場合は、常に同じ乱数が生成されますので、独立した乱数を生成した場合は、その度に初期値を変更する必要があります。
利用者様の方では、混雑状況を確認することは出来ません。
空いておりましたら、すぐにASG状態(アサイン状態:実行がスケジューリングされた状態)になりますので、sstatコマンドで表示されるSTT項目の結果をもって判断いただけますと幸いです。
もし何かスクリプトやシステムに問題があって、QUE状態になっている場合は、こちらからお知らせいたします。
F_UFMTENDIAN環境変数を指定することで可能です。
ただし、当センターで採用しておりますスケジューラ(NQSII)の仕様で、「setenv」で環境変数を指定すると、マスターノードにのみ有効に働き、スレーブノードには反映されません。(マルチノードジョブの場合です。シングルノードジョブの場合ですとsetenvでも問題なく動作します。)
ジョブスクリプトの中で、以下のように指定していただくと、すべてのノードに反映されます。
--------------
#PBS -v F_UFMTENDIAN=[装置番号]
--------------
【参考情報】
ジョブスクリプト 環境変数の指定
NQSIIマニュアル(p.342 - p.343) ※利用者番号で認証が必要
ファイル形式が、BOM(Byte Order Mark)付きの形式となっており、バッチスクリプトの1行目のシェル指定が正しく認識されていない可能性があります。
BOM付きかどうかは、下記で確認可能です。
% file nqs.sh
BOMはviなどのエディタで編集可能ですので、削除いただいた上で、再度ジョブの投入をお願いいたします。
下記に、viでの編集例を示しています。
編集例
% vi -b nqs.sh (-bオプションを付けてください)
<feff>#!/bin/csh
^^^^上記の<feff>という文字がBOMとなります。こちらを削除し、保存してください。
投入したジョブクラスに誤りがある可能性があります。
再度ご確認の上、問題なさそうであれば下記までご連絡ください。
お問い合わせ