
私はシミュレーションのためにLAMMPSソフトウェアを実行するcentosクラスタを使用しています。これで、フォルダ内で複数のファイルを実行する必要があります。各ファイルには同様のタイプのサブファイルがあります。つまり、3つのファイルが含まれています。 1. 入力データファイル (file.restart.3500000) 2. スクリプト (in.open) 3. PBS ファイル (マスターノードではなく子ノードでコードを実行するには)
私の必要性は、シリアルではなく、並列すぎる単一のコマンドを使用してフォルダ内のすべてのファイルを実行することです。つまり、最初のファイルが完了した後に2番目のファイルを起動するのではなく、システムはすべてのファイルを同時に実行したいと思います。
現在、個々のフォルダに移動して複数のファイルを実行する必要があるため、時間がかかるスクリプトを実行する必要があります。
ファイルを実行するには、フォルダから "qsub runme.pbs"コマンドを一度実行します。すべてのファイルの内容が同じなので、これに対処できますか?
PS: - 私はこのLinux分野の初心者だけなので、どんな助けでもとても役に立ちます。
答え1
次のように単純なforループを使用して実行できます。
cd /path/to/wherever
for d in D_[0-9]*/; do
cd "$d"
qsub runme.pbs
cd ..
done
qsub
各ジョブをジョブキューに送信すると、クラスタはスケジューラが許可するようにそのジョブを実行します。
またはpushd "$d"
andのpopd
代わりにcd "$d"
andを使用してくださいcd -
。
qsub
バックグラウンドですべてのプログラムを実行するにはいくつかの利点がありますが、qsub runme.pbs &
そうでない可能性があります。一度に多くのタスクを実行することで、スケジューラに過負荷がかかり、速度が遅くなる可能性が高くなります。