1

ディレクトリに約 500 個の奇妙なデータ ファイルがあります。コマンドを使用してこれらのファイルを処理しています。問題は、もちろん、どのユーティリティもそうであるように、それぞれを順番に取得することです。当面、私のプロセスが行うことは、約 500 のプロセスを生成し、それらを 10 のバッチでずらして、それぞれに待機が散在するようにすることです。ちょうどこのような 。1 ファイル == このデザインごとに 1 プロセス。

command1 <parameters> > log 2&>1&
command2 <parameters> > log 2&>1&
command3 <parameters> > log 2&>1&
command4 <parameters> > log 2&>1&  /# ....till 10
wait 
command11 <parameters> > log 2&>1&
command1 <parameters> > log 2&>1&
command1 <parameters> > log 2&>1& /# ...till 20 
wait
command1 <parameters> > log 2&>1& 

そのため、システムを同時に叩くことはありません。このコマンドは、実際には別の一連のシェルと C コードであり、データ ファイルを解析し、Oracle への接続を伴ういくつかのチェックを行います。コマンドを実行するたびに新しい DB 接続を開かないように、これを再設計したいと思います。100 個のファイルがあるとします。100 個の個別の接続ではなく、10 個の DB 接続のみを開きたいと考えています。私がやりたい方法は、まず私が持っているファイルの数を数えることです。それらを 10 で割ります。各分割は 10 個のファイルの「バッチ」です。したがって、100 個ではなく 150 個のファイルがあり、プロセスは自動的に 15 個のディレクトリを作成する必要があります。各ディレクトリはその中に10個のファイルを移動する必要があり、実行できます

 command1 <parameters> Directorypath  > log 2&>1& 
/# command can pick up all files in a directory or a single file
/# ct till command 10 ...
....
 command10 <parameters> Directorypath  > log 2&>1& 

10ファイル== この設計による1プロセス。

これをどのように行うことができるかについての提案は、vis コマンドで確認できます。タイ

4

1 に答える 1

1

GNU parallel を使用すると、ディレクトリ内のすべてのファイルに対して、一度に 10 個ずつコマンドを並行して実行できます。

parallel --gnu -j 10 yourcommand --yourflags {} ::: *

そして、それは実行されます

yourcommand --yourflags file1
yourcommand --yourflags file2

そして一度に10個。

于 2014-01-31T20:21:38.130 に答える