bash のシェルスクリプト内で background job を立ち上げた場合、最後に wait を入れないと、job の完了を待たずにスクリプトが終了してしまう。したがって、job も共倒れになってしまう。
例えば、TORQUE を使って 30 並列で SHELXE の条件検討を行うスクリプトは、以下のようになる。
#!/bin/bash #PBS -o run_shelxe.stdout #PBS -e run_shelxe.stderr #PBS -l nodes=1:ppn=30 #PBS -q smp for solv in 0.42 0.44 0.46 0.48 0.50 0.52; do for reso in 1.6 1.7 1.8 1.9 2.0; do for z in 6; do ln -s sad.hkl reso$reso-solv$solv-z$z.hkl ln -s sad_fa.hkl reso$reso-solv$solv-z${z}_fa.hkl ln -s sad_fa.res reso$reso-solv$solv-z${z}_fa.res shelxe reso$reso-solv$solv-z$z reso$reso-solv$solv-z${z}_fa -s$solv -a25 -h$z -z$z -d$reso -q -i& done done done wait
残念ながら、同時に起動する job 数を容易に制限する方法はない。一つの方法としては、ジョブを立ち上げる前に fg | wc -l などを確認するループを入れることが考えられる。
なお、1条件ごとに1つのジョブ(TORQUE のほうのジョブ)を入れれば簡単なのだが、同時ジョブ数が制限されているので、1ジョブでたくさん CPU を使ったほうが特なのである。