2017-02-03 5 views
3

私はシェルスクリプトdata.shを持っています。このスクリプトを実行するには、Table_1という単一の引数を渡します。ペイロードを複数のcronジョブに配布する

私は別のスクリプトの結果として得られるテストファイルを持っています。

今、テストファイルには、スクリプトに渡す引数が1000以上あります。

ファイルは以下のようになります。

Table_1 
Table_2 
Table_3 
Table_4 
and..so..on 

今私は、並列に実行するスクリプトを実行したいです。

私はこれをcronジョブを使って実行しています。

まず、Linuxでsplitコマンドを使用してテストファイルを20個に分割します。

split -l $(($(wc -l < test)/20 + 1)) test 

次に、テストファイルをxaa、xab、xacなどの20個の部分に分割します。これは手動プロセスの多くが含まれたよう

* * * * * while IFS=',' read a;do /home/XXXX/data.sh $a;done < /home/xxxx/xaa 
* * * * * while IFS=',' read a;do /home/XXXX/data.sh $a;done < /home/xxxx/xab 
and so on. 

はその後、cronジョブを実行します。私はこれを動的にしたいと思います。

1)できるだけ早く私は、テストファイルを取得するよう、私はそれが特定の場所で20個のファイルを自動的に保存発言に分割されたい。ここでは

は私が達成したいものです。

2)次に、スクリプトに引数として20個のファイルを渡して、毎日5 amにcronジョブをスケジュールしたいと思います。

これを実装する最良の方法は何ですか?説明付きの回答は感謝します。

答えて

2

あなたのできることは次のとおりです。 2つのcronジョブを作成します。

  1. file_splitter.sh - >ファイルを分割し、特定のディレクトリに格納し
  2. file_processer.sh - >は、上記のディレクトリから一度に1つのファイルをピックアップ読み取りループを行い、そしてdata.shを呼び出します。処理が成功した後にファイルを削除します。

スケジュールfile_splitter.shは、先に実行するfile_processor.shです。

さらに並列性を実現したい場合は、file_splitter.shを複数のディレクトリに分割ファイルを書き込むことができます。サブ1、サブ2などと呼ばれるとしましょう。次に、file_processor.shという複数のインスタンスをスケジュールし、サブディレクトリ名を引数として渡すことができます。分割されたファイルは別々のディレクトリに格納されるため、特定のサブディレクトリ内のファイルを1つのジョブで処理することができます。

cronコマンドはできるだけシンプルにしてください。

* * * * * /path/to/file_processor.sh 

* * * * * while IFS=',' read a;do /home/XXXX/data.sh $a;done < /home/xxxx/xab 

よりも優れている理にかなって?

私は、効果的にcronジョブを管理する方法についての投稿を書いていました。あなたはそれを見てみたいかもしれません:

Managing log files created by cron jobs

関連する問題