
私はいくつかのタスクを順番に実行するコミットスクリプトを持っています(少なくとも私が書いた方法はそうです)。ただし、スクリプトを実行すると、最後のジョブの動作は、前のジョブが完了した順序によって決まります。添付ファイルはスクリプトの一部です。
#!/bin/bash
#SBATCH --job-name=cff_cg
#SBATCH --nodes=1 --ntasks=20
#SBATCH --time=0-06:00:00
#SBATCH --mem-per-cpu=4gb
#SBATCH --constraint=avx512
#SBATCH --partition=sixhour
#SBATCH --output=1_%a.out
#SBATCH --array=1-100
.
.
.
.
.
.
.
.
if [[ -f $main_path/surf_$fold/data.lammps ]] ; then
echo 'EXISTS'
check=$(awk 'FNR == 21 {print $2}' $main_path/surf_$fold/data.lammps)
echo "$check"
if [[ $check == '1' ]] ; then
awk 'f{print $3; f=0} /Energy/{f=1}' $main_path/surf_$fold/log.lammps > $main_path/surf_$fold/min_energy.dat
awk '/Energy/{ if (secondline==0) { secondline=1; next; } else { getline; print $3; } }' $main_path/surf_$fold/log.lammps > $main_path/surf_$fold/min_energy_$fold.dat
fi
fi
wait
cat $main_path/surf_$fold/min_energy_$fold.dat >> $main_path/energy_final_new.dat
exit 0
最終出力ファイル「energy_final_new.dat」を取得する方法は、配列の順序に従います。つまり、値の順序は001,002,003,004ですが、私が得るのは値の順序が混在していることです(一度私はget 002,004,003,001など)私はこれがそれぞれの順序だと思います。操作は完了した順序で行われますが、array_idに従って順番に進む必要があります。誰かが私を助けることができますか? PS - SBATCHはスクリプトを並列に実行します。