입력 매개변수(getopts 사용)에 의존하는 대규모 스크립트가 있습니다. 이러한 매개 변수 중 하나는 파일(모두 *bam이라는 이름)이 포함된 디렉터리입니다. 스크립트는 두 부분으로 구성됩니다.
- 1부: 입력 *bam 파일을 기반으로 특정 숫자를 계산합니다. 명확히 말하면 결과는 파일당 숫자가 아니라 숫자입니다.
- 2부: 1부에서 찾은 숫자를 사용하여 각 *bam 파일에 대해 일련의 작업을 수행합니다.
이제 계산적인 관점에서 볼 때 Part 1은 처음에는 매우 빠릅니다. 그래서 내 설정은 다음과 같습니다
- 터미널에서 스크립트 실행: 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
답변1
대답은 "상황에 따라 다르다"이다. 실행 노드가 작업을 제출할 수 있도록 HPC 클러스터를 설정할 수 있지만 필수는 아닙니다. 현지 HPC 관리자에게 간단한 질문을 하면 명확한 답변을 얻을 수 있을 것 같습니다. 또는 두 번째 작업을 제출하고 작동하는지 확인하는 것 외에는 아무 작업도 수행하지 않는 빠른 스크립트를 시도할 수 있습니다.