매개변수가 있는 다중 명령: 논리적 OR을 사용하는 방법은 무엇입니까?

매개변수가 있는 다중 명령: 논리적 OR을 사용하는 방법은 무엇입니까?

두 가지 명령이 있습니다

    sbatch -J $jobname -N 1 --array [1-10:1] \
         script.sh param1 param2 param3 \
         param4 param5 param6; 
    qsub -N $jobname -t 1-10:1 \ 
         script.sh param1 param2 param3 \
         param4 param5 param6; 

첫 번째 명령이 실패하면 논리적 OR을 사용하여 두 번째 명령을 실행하고 싶습니다.

난 노력 했어:

{ sbatch ... ; } || \
{ qsub ... ; }

편집: 좀 더 구체적으로 설명하세요.

두 개의 클러스터가 있습니다. 첫 번째 SLURM과 두 번째 SGE에서 실행합니다. SLURM과 SGE에 동일한 스크립트를 사용하고 싶습니다. 그래서 저는 논리 OR을 사용하여 이 작업을 해결하려고 했습니다. 첫 번째 명령이 실패하면(시스템이 존재하지 않고 명령을 알 수 없기 때문에) 두 번째 명령이 실행됩니다.

구현하다

    sbatch -J $jobname -N 1 --array [1-10:1] \
         script.sh param1 param2 param3 \
         param4 param5 param6; ||
    qsub -N $jobname -t 1-10:1 \ 
         script.sh param1 param2 param3 \
         param4 param5 param6; 

생산하다

syntax error near unexpected token `||'

구현하다

{ sbatch ... ; } || 
{ qsub ... ; }

생산하다

sbatch: command not found
Your job-array 9982202.1-10:1

답변1

표시된 대로 qsub실행은 두 명령 사이의 종료 상태를 기반으로 합니다.sbatch||

sbatch -J "$jobname" -N 1 --array '[1-10:1]' \
        script.sh param1 param2 param3 param4 param5 param6 ||
qsub -N "$jobname" -t '1-10:1' \
        script.sh param1 param2 param3 param4 param5 param6

그러나 이는아니요make는 qsub실행 중인 스크립트의 종료 script.sh상태 에 따라 달라집니다 sbatch.

sbatch스크립트와 동일한 종료 상태로 종료 하려면 해당 또는 옵션을 script.sh사용해야 합니다 .sbatch-W--wait

-W, --wait
제출된 작업이 종료될 때까지 종료하지 마십시오. 명령의 종료 코드는 sbatch제출된 작업의 종료 코드와 동일합니다. 정상적인 종료가 아닌 신호로 인해 작업이 종료되면 종료 코드가 1로 설정됩니다. 작업 배열의 경우 기록된 종료 코드는 작업 배열의 모든 작업에 대해 가장 높은 값이 됩니다.

즉,

sbatch -W -J "$jobname" -N 1 --array '[1-10:1]' \
        script.sh param1 param2 param3 param4 param5 param6 ||
qsub -N "$jobname" -t '1-10:1' \
        script.sh param1 param2 param3 param4 param5 param6

sbatch사용 가능한 경우 명령을 실행하고 그렇지 않은 경우 명령을 실행하려면 qsub다음을 사용할 수 있습니다.

if command -v sbatch >/dev/null 2>&1; then
    sbatch -J "$jobname" -N 1 --array '[1-10:1]' \
            script.sh param1 param2 param3 param4 param5 param6
else
    qsub -N "$jobname" -t '1-10:1' \
            script.sh param1 param2 param3 param4 param5 param6
fi

이는 쉘에 내장된 유틸리티를 사용하여 찾을 수 있는지 command테스트합니다 . sbatch테스트가 성공하면 sbatch실행하고, 그렇지 않으면 qsub시도하세요.

관련 정보