我怎么用nohup提交多个工作?

时间:2013-09-10 01:24:16

标签: linux bash shell

我有几个工作要按特定顺序提交。 首先,同时提交cal1st_1.sh cal1st_2.sh ... cal1st_10.sh等多个作业并同时处理。完成所有这些工作后,我有一份名为post_process.sh的工作。然后,多个工作,例如cal2nd_1.shcal2nd_2.sh .... cal2nd_10.sh,然后又post_process.sh,我需要这样做四次。

我试着写一个像get_final.sh这样的脚本

#!/bin/bash
./cal1st_1.sh & ./cal1st_2.sh & ./cal1st_3.sh...... & ./cal1st_10.sh
./post_process.sh
./cal2nd_1.sh & ./cal2nd_2.sh & ./cal2nd_3.sh...... & ./cal2nd_10.sh
./post_process.sh

并使用命令nohup ./get_final.sh &运行它,但它似乎不起作用,有时post_process.sh启动,即使cal1st*sh也未完成,有时cal1st*sh不是'同时处理。有人能告诉我哪部分代码错了吗?如果您对我的代码有任何疑问,请发表评论。

修改

我写了一个像这样的脚本get_final.sh,你觉得它会起作用吗?我应该用nohup ./get_final.sh &

执行它吗?
#!/bin/bash
pre_cal.sh
for i in `seq 1 13`; do
cal_dis_vel_strain_$i.sh &
done
wait  
echo 1 > record
./post_cal.sh

...

1 个答案:

答案 0 :(得分:1)

  

有人能告诉我哪部分代码错了吗?

错误的是你假设“后处理”任务在前一个“cal”进程完成之前不会启动。这不是&的工作方式。 &做的是让子进程在后台运行......而不是等待它完成。

执行您要执行的操作的方法是使用内置wait命令,如下所述:

在这种情况下,每个后台进程(按任意顺序)都需要wait

(问题与nohup无关。)


回应你的跟进:

  1. 这不对。对于每个子进程,您需要wait。单个wait只会等待一个进程。

  2. 一旦你解决了这个问题,就可以这样称呼它。但是,如果在脚本完成之前有可能断开会话,则只需要这样做。另一个替代方案是screen程序......它允许您分离并重新连接会话。