Bash

SLURM:自定義標準輸出名稱

  • May 8, 2020

使用 執行 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.

引用自:https://unix.stackexchange.com/questions/285690