-1

以下は私のcronjobスクリプトです。

3rd_jobの完了を待って4、5日を開始します

2nd_jobが完了するのを待って、6,7,8番目のジョブを開始します。

どうすればこの感謝を前もって達成できますか

現在、4,5番目のジョブを開始するために、 1,2,3番目のジョブの完了を待っていますが、 4,5番目を開始するために3番目を待ち、 6,7,8番目を示すために2番目の完了のみを待ちたいだけです。

    #!/bin/bash
    cd /home/ubuntu/
    PATH=$PATH:/usr/local/bin
    export PATH
    nohup scrapy crawl 1st_job &
    nohup scrapy crawl 2nd_job &
    nohup scrapy crawl 3rd_job &
    wait $(pgrep 3rd_job)
    nohup scrapy crawl 4th_job &
    nohup scrapy crawl 5th_job &
    wait $(pgrep 2nd_job)
    nohup scrapy crawl 6th_job &
    nohup scrapy crawl 7th_job &
    nohup scrapy crawl 8th_job &
4

1 に答える 1

1

$!最後に生成された非同期タスクのPIDを含む変数を使用できます。

#!/bin/bash
cd /home/ubuntu/
PATH=$PATH:/usr/local/bin
export PATH
nohup scrapy crawl 1st_job &
nohup scrapy crawl 2nd_job &
pid_2nd="$!"
nohup scrapy crawl 3rd_job &
wait $!
nohup scrapy crawl 4th_job &
nohup scrapy crawl 5th_job &
wait $pid_2nd
nohup scrapy crawl 6th_job &
nohup scrapy crawl 7th_job &
nohup scrapy crawl 8th_job &

もう少し複雑なものが必要な場合、たとえば、有向非巡回グラフ方式で実行します(たとえば、3番目の終了が4-5で始まり、2番目の終了が6-8で始まるとすぐに)呼び出しを関数に再編成することをお勧めします。それらは非同期的に呼び出すことができます:

#!/bin/bash
second () {
    nohup scrapy crawl 2nd_job
    nohup scrapy crawl 6th_job &
    nohup scrapy crawl 7th_job &
    nohup scrapy crawl 8th_job &
}

third () {
    nohup scrapy crawl 3rd_job
    nohup scrapy crawl 4th_job &
    nohup scrapy crawl 5th_job &
}

cd /home/ubuntu/
PATH=$PATH:/usr/local/bin
export PATH
nohup scrapy crawl 1st_job &
third &
second &

これがお役に立てば幸いです=)

于 2012-10-16T11:04:52.587 に答える