2017-12-18 8 views
1

私は必要なものをpythonスクリプトの出力をチェックするRスクリプトの後に、約10時間かかるPythonスクリプトを実行するbashスクリプトを書きます。心配します。ここで私が持っているものです。未知のプロセス番号を持つBash waitコマンドを正しく使用する

ProdRun="python scripts/run_prod.py" 

echo "Commencing Production Run" 

$ProdRun #Runs python script 

wait 

DupCompare="R CMD BATCH --no-save ../dupCompareTD.R" #Runs R script 
$DupCompare 

今私の問題は、多くの場合、Pythonスクリプトは、異なるPIDの多くと、その入力に応じて、当社のLinuxサーバー上の異なるプロセスのヒープ全体を生成することができ、我々は労働者のヒープを持っているということですスクリプトを実行している同じサーバーを使用しています。私が読むことができる限り、 'wait'コマンドはすべてのプロセスが完了するのを待つか、特定のPIDが終了するまで待たなければなりませんが、割り当てられているPIDの数やプロセス数はわかりません。これを使って?

編集:これを助けてくれてありがとう、ここで私はこのことを探している人のために私のジレンマを引き起こした。私はProdRunのpythonスクリプトをそれ自身のスクリプトに分解しましたが、問題は残っていましたが、これらのスクリプトの1つに、もう1つ小さなスクリプトが呼び出されていたことがわかりました。その末尾に "&" Pythonスクリプト自体の内部でそれを待つコマンドは無視されます。これを単に削除し、 "os.system()"の行を挿入すると、すべてのコードを順番に実行することができました。

+0

子プロセスだけを待つことができます。孫のプロセスを待つことはできません。 –

+0

コマンドを格納する変数を使用しないでください。関数を使用します。 – chepner

答えて

1

異なるタスク間で複雑な依存関係を持つジョブスケジューラを実装しようとしているようです。代わりにジョブスケジューラを使用することをお勧めします。それはあなたが例外的なケースを扱う、また、監視などの機能の恩恵を受けながら、これらのジョブを実行するように指定することができ、エラーは、...

例は、オープンソースのrundeck https://github.com/rundeck/rundeckたり、商業1 http://www.bmcsoftware.uk/it-solutions/control-m.html

+0

返事ありがとうございます。申し訳ありませんが、わからない場合は、Pythonスクリプトの終了後にこの特定のRスクリプトが開始されている限り、他のプロセスは心配していません。それはどのように動作するのですか?私は数字のジョブをpythonスクリプトに入力し、それは私が提出する各ジョブのための独自のPIDを持つpythonプロセスを持っています。それがジョブスケジューラを必要とするという領域に入るのでしょうか? –

0

はあなたのPythonを作りますそれが生まれた子どもたちのプログラム待ち。それがこのシナリオを修正する適切な方法です。その後、Pythonが終了してから待つ必要はありません(sic)。

(また、コマンドを変数に入れないでください)

関連する問題