Jobs
在 HPC 作業中送出 HPC 作業
我有一個大腳本,它依賴於輸入參數(使用 getopts)。其中一個參數是一個包含文件的目錄(全部命名為 *bam) 該腳本有 2 個部分:
- Part1:根據輸入的*bam文件,計算一個具體的數字。需要明確的是,結果是一個數字,而不是每個文件一個數字。
- 第 2 部分:使用在第 1 部分中找到的數字,對每個 *bam 文件執行一系列操作。
現在,最初,從計算上講,part1 非常快。所以我的設置是:
- 在終端上執行腳本:bash script.sh
- 在 script.sh 中,對於第 2 部分,為每個文件送出一個 HPC 作業
然而,現在我需要分析比原計劃更多的文件,我意識到第 1 部分的計算量也會很大——因此我還需要在 HPC 上執行它。
所以我的問題是:
- 是否可以送出在其中送出作業的 HPC 作業?
- 換句話說,我可以將 script.sh 作為作業送出,並且仍然讓它在其第 2 部分中送出作業嗎?
為了清楚起見,這是我的腳本可能看起來的範例:
#!/usr/bin/bash # PART 0: accept all input arguments USAGE() { echo "Usage: bash $0 [-b <in-bam-files-dir>] [-o <out-dir>] [-c <chromlen>]" 1>&2; exit 1; } if (($# == 0)); then USAGE fi # Use getopts to accept each argument while getopts ":b:o:c:h" opt do case $opt in b ) BAMFILES=$OPTARG ;; o ) OUTDIR=$OPTARG ;; c ) CHROMLEN=$OPTARG ;; h ) USAGE ;; \? ) echo "Invalid option: -$OPTARG exiting" >&2 exit ;; : ) echo "Option -$OPTARG requires an argument" >&2 exit ;; esac done # PART1: calculate this unique number NUMBER=0 for i in $(ls $BAMFILES/*.bam) do make some calculations on each file to obtain a number ... keep only the smallest found number and assign its value to $NUMBER done echo "Final number is ${NUMBER} " # PART2: Using $NUMBER that we found above, submit a job for each *bam file for i in $(ls $BAMFILES/*bam) do if [ ! -f ${OUTDIR}/${SAMPLE}.bw ]; then command=" command -options -b $NUMBER $i" echo $command | qsub -V -cwd -o $OUTDIR -e $OUTDIR -l tmem=6G -l h_vmem=6G -l h_rt=3600 -N result_${SAMPLE} fi done
答案是“視情況而定”。您的 HPC 集群可以設置為讓執行節點能夠送出作業,但這不是必需的。向您當地的 HPC 管理員提出一個簡單的問題,這聽起來會給您一個明確的答案。或者您可以嘗試一個快速腳本,該腳本除了送出第二份工作外什麼都不做,看看它是否有效。