SLURM:自定義標準輸出名稱
使用 執行 SLURM 作業時
sbatch
,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
給出工作名稱- 我不知道如何以所需格式獲取日期。作業 ID 類型用作跨執行的唯一標識符,文件修改日期擷取日期以供以後分析。
我的 SBATCH 魔術看起來像這樣:
#SBATCH --output=R-%x.%j.out #SBATCH --error=R-%x.%j.err
我更喜歡添加
R-
為前綴,這樣我可以輕鬆移動或刪除所有R-*
你不能,至少不是你想要的方式。這些
#SBATCH
行是恰好由sbatch
命令解釋的 shell 註釋,您不能在其中執行 shell 程式碼。此外,
sbatch
’-o
選項只能理解一組非常有限的替換符號(請參閱下面的手冊頁摘錄)。可能最接近您想要的內容是
sbatch
在包裝腳本中執行,該腳本將作業 ID、作業名稱以及目前日期和時間附加到文本文件(例如timestamp<TAB>jobid<TAB>jobname
)中,然後在作業完成執行後使用它來重命名輸出文件。time_t 或 seconds-since-the-epoch,即
date +%s
,是腳本中最有用的日期/時間格式。它可以很容易地列印出來,而無需先解析它。編寫一個遍歷該文本文件的腳本並不難,並為每個不再執行(檢查
squeue -t BF,CA,CD,F,NF,PR,TO
)且尚未重命名的作業標識重命名輸出文件。僅供參考,手冊頁
sbatch
說:-o,–輸出=
指示 Slurm 將批處理腳本的標準輸出直接連接到“文件名模式”中指定的文件名。預設情況下,標準輸出和標準錯誤都指向同一個文件。對於作業數組,預設文件名是
slurm-%A_%a.out
,%A
被作業 ID 和%a
數組索引替換。對於其他作業,預設文件名為slurm-%j.out
,其中%j
替換為作業 ID。請參閱--input option
文件名規範選項。而且,因為
-i
它說:-i,–輸入=
指示 Slurm 將批處理腳本的標準輸入直接連接到“文件名模式”中指定的文件名。預設情況下,
/dev/null
在批處理腳本的標準輸入上打開,標準輸出和標準錯誤都指向名為 的文件slurm-%j.out
,其中%j
替換為作業分配編號,如下所述。文件名模式可能包含一個或多個替換符號,它們是一個百分號
%
後跟一個字母(例如%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.