-1

波纹管是我的 cronjob 脚本,我只想

等待3rd_job完成以开始4th,5th

& 等待2nd_job完成以开始第 6、7、8 个工作。

我怎么能做到这一点提前谢谢

目前开始第 4,5份工作,它正在等待第1,2,3份工作的完成,但我只想等待第 3份开始第4,5份工作,只等待第 2份完成说明第6,7,8 份工作

    #!/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 回答