2

ここに私のシェルスクリプトがあります

#!/bin/bash

crawlers(){
    nohup scrapy crawl a &
    nohup scrapy crawl b &
    wait $!
    nohup scrapy crawl f &
    nohup scrapy crawl g &
    wait $!
    nohup scrapy crawl h &
    nohup scrapy crawl i &
    wait $!
    nohup scrapy crawl i &
    nohup scrapy crawl j &
    nohup scrapy crawl k &
    wait $!
    nohup scrapy crawl l &
    nohup scrapy crawl m &
}

PATH=$PATH:/usr/local/bin
export PATH

python add_columns.py &
wait $!
crawlers &
wait $!
python final_script.py &

最初に実行したいadd_columns.py スクリプト

次に、クローラースクリプト (クローラー内のすべてのスクリプトは非同期です)

最後にfinal_script.pyを実行したい

しかし、上記のシェルスクリプトを使用して

final_script.py は終了前に実行中です

nohup scrapy crawl l &
nohup scrapy crawl m &

クラルワーズを待ちますが

crawlers &
wait $!

最後に、どうすれば、crawler() メソッドですべてのジョブが完了した後にのみ final_script.py を呼び出すことができますか。

ありがとう

4

1 に答える 1

0

まず、すぐに必要なものをバックグラウンドで処理する必要があるのはなぜwaitですか?

第 2 に、crawlers関数内ではwait、呼び出しの半分しか実行していません。残りの半分はまだ実行されている可能性があります。

wait現在アクティブなすべての子が終了するまで待機するには、引数なしで使用します。これはより良いバージョンになります:

#!/bin/bash

crawlers(){
    nohup scrapy crawl a &
    nohup scrapy crawl b &
    nohup scrapy crawl f &
    nohup scrapy crawl g &
    nohup scrapy crawl h &
    nohup scrapy crawl i &
    nohup scrapy crawl i &
    nohup scrapy crawl j &
    nohup scrapy crawl k &
    nohup scrapy crawl l &
    nohup scrapy crawl m &

    wait
}

PATH=$PATH:/usr/local/bin
export PATH

python add_columns.py

crawlers

python final_script.py
于 2012-11-03T18:51:44.377 に答える