LSF はバッチ スケジューリング システムであるため、クライアントとしての LSF とのやり取りは非同期です。
- bsub を使用してスケジューリングのためにジョブをサブミットすると、bsub コマンドはすぐに戻ります
- バックグラウンドでアイテムをリストし、システムがジョブをスケジュールしてディスパッチします
実際のワークロードのステータスを確認するために、いくつかのオプションを提供できます。
オプション1
bsub
同期的に行動することを強制します。これは、コード サンプルの現在の状態を考えると、おそらく最も簡単なオプションです。基本的にはbsub
、-K
オプションを指定するだけです。これにより、ジョブがキューに入れられ、ディスパッチされ、完了するまで、コマンドは基本的に戻りません。その後、コマンドは、必要に応じてジョブの終了コードを返します。
std::string cmdLine = "bsub -K test.sh"; // Use -K option
File *fp = popen(cmdLine.c_str());
int retcode = pclose(fp); // this will now return the exit code of test.sh
オプション 2
-K
一部のサイトでは、さまざまな理由からユーザーにこのオプションを使用させたくない場合があります。その場合は、bjobs
コマンドを使用してジョブのステータスをシステムに問い合わせる必要があります。
基本的に、bsub
リターン後、コードはコマンドを繰り返し呼び出してbjobs
出力を解析し、ジョブの終了ステータスを判断します。例えば:
$ bjobs -o 'stat exit_code' 6308
STAT EXIT_CODE
DONE -
ジョブ ID 6308 の終了ステータスと終了コードの列が表示されます (ジョブ ID は、ジョブのbsub
送信時に の出力を解析することによって取得されます)。
- ステータス列が
DONE
ジョブが正常に完了した場合
- ステータス列が の
EXIT
場合、ジョブは異常終了し、EXIT_CODE 列から終了コードを取得できます
- ステータス列が である
RUN
かPEND
、ジョブが実行中またはディスパッチを待機している場合、コードはsleep()
しばらくの間、bjobs
再度呼び出しを試行する必要があります。
上記の出力例では、簡単に解析できるように出力をカスタマイズするオプションをbjobs
使用していることに注意してください。-o
これは比較的新しい機能です。古いバージョンの LSF を使用している場合は、これを使用せずに済ませる必要があります。実行可能ですが、もう少し複雑です。