各サブディレクトリには、74個のファイルを含むサブディレクトリがいっぱいのディレクトリがあります。 74個のファイルを分析し、すべてのディレクトリで並列に実行したいbashスクリプトがあります。
各サブディレクトリに移動してbashスクリプトを手動で実行すると、出力は完璧です。
bashスクリプトを並列に実行しようとすると、bashスクリプトが1つのファイルでのみ実行されるように見えます。
これはスクリプトを並列に実行するために使用するコードです。
parallel "cd {} && bash Final_Fantasy.sh" :::: dir.lst
奇妙なことは、上記と同じコードを使用して同じファイルで別のスクリプトを実行しており、問題が発生しないことです。
私が実行したいスクリプトは、awkとsedを使用した単純な書き込みと上書きといくつかの読み取りwhileループです。
私の並列コードに問題がありますか?それともどこで問題を見つける必要がありますか?
ありがとうございます!
編集1:
1) Script1.sh: Final_Fantasy.sh と単一の出力ファイル (Output1.txt) を空のディレクトリにコピーします。
2)dir.lstの各ディレクトリには、Output1.txtとFinal_Fantasy.shという2つのファイルしか含まれていません。
3)Final_Fantasy.shの最初の行は、Output1.txtを74個の別々のファイルに切り捨てます。
4)Final_Fantasyには、read-whileループで一度に74個のファイルのいずれかを編集できる複数行のawk、sed、およびgrepが含まれています。
5)一部の手順では、後で使用できるように出力を.txtファイルに書き込みます。
6)ループの最後のステップは、2つの.txtファイルを1つにcat
まとめることです。
exit
問題が発生した場合は、ループの問題を解決するためにファイルの最後にもう1つあります。次のようになります。
done < $filename2 done < $filename1 exit more code that works
この時点で私が考えることができる唯一のことは、1)HPCは私のコントロールの範囲を超えているということです。 2)exit
すべてのファイルを分析した後ではなく、ループの最初の繰り返しの後に楽しく行動して終了します。
編集2)私のローカルコンピュータでこの問題を並列に再現することはできません。これにより、これは奇妙なHPC問題であると考えられます。そうは思いません。私は制御権を持っています。
parallel
編集3)問題が発生した場所を確認できるように、現在実行中のジョブを段階的に出力する方法はありますか?
答え1
parallel
その引数を直接実行します。シェルを使用しないと、シェル操作を実行できません。sh -c
後ろに入れてくださいparallel
。
更新:上記はmoreutils並列処理にのみ適用され、この質問に関連するGNU並列処理には適用されません。