sbatch
を使用してSLURMジョブを実行すると、slurmはslurm-102432.out(slurm-jobid.out)のような標準出力ファイルを生成します。これを(yyyymmddhhmmss-jobid-jobname.txt)にカスタマイズしたいと思います。これを行うにはどうすればよいですか?
より一般的には、sbatch
引数_-o
_に計算された変数を含めるにはどうすればよいですか?
私はscript.shで以下を試しました
_#SBATCH -p core
#SBATCH -n 6
#SBATCH -t 1:00:00
#SBATCH -J indexing
#SBATCH -o "/home/user/slurm/$(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txt"
_
しかし、それはうまくいきませんでした。ファイルの場所は新しいディレクトリで正しかったが、ファイル名は単なるリテラル行$(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txt
でした。
したがって、標準出力ファイルをディレクトリ_/home/user/slurm/
_に次のようなファイル名で保存する方法を探しています:_20160526093322-10453-indexing.txt
_
これが以前の答えからの私のテイクです
%j
はジョブIDを示します%x
ジョブ名を与える私のSBATCHマジックは次のようになります:
#SBATCH --output=R-%x.%j.out
#SBATCH --error=R-%x.%j.err
R-
を接頭辞として使用すると、すべてを簡単に移動または削除できますR-*
できません、少なくともあなたがやりたいようにはできません。それらの#SBATCH
行は、たまたまsbatch
コマンドによって解釈されるシェルコメントであり、その中でシェルコードを実行することはできません。
また、sbatch
の-o
オプションは、非常に限られた一連の置換シンボルしか理解しません(以下のmanページの抜粋を参照)。
おそらく、あなたが望むものに最も近いものは、sbatch
をラッパースクリプトで実行することです。これは、ジョブID、ジョブ名、現在の日付と時刻をテキストファイルに追加します(例:timestamp<TAB>jobid<TAB>jobname
)。次にジョブの実行が終了した後を使用して出力ファイルの名前を変更します。
time_t、または秒以降のエポック、つまりdate +%s
は、スクリプトで最も便利な日付/時刻形式です。簡単にきれいに印刷できますが、最初に解析する必要はありません。
そのテキストファイルを繰り返し処理し、実行されなくなったすべてのジョブIDの出力ファイルの名前を変更し(squeue -t BF,CA,CD,F,NF,PR,TO
で確認)、まだ名前が変更されていないスクリプトを記述することは難しくありません。
参考までに、sbatch
のmanページには次のように書かれています。
-o、-output =
バッチスクリプトの標準出力を「ファイル名パターン」で指定されたファイル名に直接接続するようにSlurmに指示します。デフォルトでは、標準出力と標準エラーの両方が同じファイルに送信されます。ジョブ配列の場合、デフォルトのファイル名は
slurm-%A_%a.out
です。%A
はジョブIDに置き換えられ、%a
は配列インデックスに置き換えられます。その他のジョブの場合、デフォルトのファイル名はslurm-%j.out
で、%j
はジョブIDに置き換えられます。ファイル名の指定オプションについては、--input option
を参照してください。
そして、-i
の場合:
-i、-input =
バッチスクリプトの標準入力を「ファイル名パターン」で指定されたファイル名に直接接続するようにSlurmに指示します。デフォルトでは、バッチスクリプトの標準入力で
/dev/null
が開かれ、標準出力と標準エラーの両方がslurm-%j.out
という名前のファイルに送信されます。ここで、%j
はジョブの割り当てに置き換えられます後述するように、番号。ファイル名パターンには、パーセント記号
%
の後に文字が続く1つ以上の置換記号を含めることができます(例:%j
)。サポートされている置換シンボルは次のとおりです。
%A Job array's master job allocation number. %a Job array ID (index) number. %j Job allocation number. %N Node name. Only one file is created, so %N will be replaced by the name of the first node in the job, which is the one that runs the script. %u User name.
sbatch
コマンドのドキュメントには、許可される文字置換の包括的なリストが記載されています: sbatch man page
filename patternsbatchを使用すると、ファイル名パターンに1つ以上の置換記号を含めることができます。置換記号は、パーセント記号「%」の後に文字が続きます(例:%j )。
\\置換シンボルを処理しないでください。
%% キャラクター "%"。
%Aジョブ配列のマスタージョブ割り当て番号。
%aジョブ配列ID(インデックス)番号。
実行中のジョブの%J jobid.stepid。 (例:「12.8」)
実行中のジョブの%jジョブID。
%N短いホスト名。これにより、ノードごとに個別のIOファイルが作成されます。
%n Node現在のジョブに関連する識別子(たとえば、「0」は実行中のジョブの最初のノードです)これにより、ノードごとに個別のIOファイルが作成されます。
実行中のジョブの%sステップID。
%t現在のジョブに関連するタスク識別子(ランク)。これにより、タスクごとに個別のIOファイルが作成されます。
%uユーザー名。
%xジョブ名。
パーセント文字とフォーマット指定子の間に置かれた数値は、IO filenameの結果にゼロを埋め込むために使用できます。フォーマット指定子が非数値データ(%N例えば)。
ジョブIDが128、ステップIDが0の4タスクジョブステップでフォーマット文字列を使用する方法の例を以下に示します。
job%J.out
job128.0.out
job%4j.out
job0128.out
ジョブ%j-%2t.out
job128-00.out、job128-01.out、...