パラメータ付きマルチコマンド:論理ORを使用する方法は?

パラメータ付きマルチコマンド:論理ORを使用する方法は?

2つのコマンドがあります

    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を使用して2番目のコマンドを実行したいと思います。

私は努力しました:

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

編集:より具体的に説明してください。

2つのクラスタがあります。最初のSLURMと2番目のSGEで実行します。 SLURMとSGEに同じスクリプトを使用したいです。だから私は論理ORを使ってこれを解決しようとしました。最初のコマンドが失敗すると(システムが存在せず、コマンドがわからないため)、2番目のコマンドが実行されます。

実装する

    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実行は2つのコマンド間の終了状態に基づいています。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試してください。

おすすめ記事