유닉스에서 배치 명령을 실행하는 방법

유닉스에서 배치 명령을 실행하는 방법

슈퍼컴퓨터(UNIX 기반)를 이용하여 공부하고 있습니다.

.sh 형식으로 여러 명령을 동시에 실행해야 합니다.

나는 매번 이것을한다

am@tinaroo1:~/.../Codes> qsub 69sk_01_800999.sh
am@tinaroo1:~/.../Codes> qsub 69sk_02_800999.sh
am@tinaroo1:~/.../Codes> qsub 69sk_04_800999.sh
am@tinaroo1:~/.../Codes> qsub 69sk_08_800999.sh
am@tinaroo1:~/.../Codes> qsub 69sk_16_800999.sh
am@tinaroo1:~/.../Codes> qsub 69sk_01_140239.sh
am@tinaroo1:~/.../Codes> qsub 69sk_02_140239.sh
am@tinaroo1:~/.../Codes> qsub 69sk_04_140239.sh
am@tinaroo1:~/.../Codes> qsub 69sk_08_140239.sh
am@tinaroo1:~/.../Codes> qsub 69sk_16_140239.sh
...
...
am@tinaroo1:~/.../Codes> qsub 69sk_01_158220.sh
am@tinaroo1:~/.../Codes> qsub 69sk_02_158220.sh
am@tinaroo1:~/.../Codes> qsub 69sk_04_158220.sh
am@tinaroo1:~/.../Codes> qsub 69sk_08_158220.sh
am@tinaroo1:~/.../Codes> qsub 69sk_16_158220.sh

100개의 파일에 대해 100개의 명령을 입력해야 합니다.

한 번에 100개의 명령을 실행할 수 있는 방법이 있습니까?

답변1

루프를 사용하여 실행할 수 있습니다

for script in 69sk*.sh; do
    qsub "$script"
done

스크립트 qsub는 자신을 백그라운드로 보내고 즉시 반환합니다. 이 스크립트 없이 스크립트를 실행하려면 다음을 사용하여 백그라운드로 직접 분기할 수 있습니다 &.

for script in 69sk*.sh; do
    ./"$script" &
done

이렇게 하면 스케줄러가 반드시 각 스크립트를 자체 코어에 배치하지는 않습니다. 100개의 코어가 있고 각 스크립트를 하나의 코어에 고정하려면 더 많은 작업이 필요합니다.

관련 정보