强制shell脚本按顺序运行任务

时间:2015-06-19 08:38:39

标签: shell task

我正在运行执行多个任务的shell脚本。问题是脚本在开始下一个任务之前不会等待任务结束。我的脚本应该以不同的方式工作,等待一个任务在下一个任务开始之前完成。有没有办法做到这一点?我的脚本看起来像这样

sbatch retr.sc 19860101 19860630
scp EN/EN1986* myhostname@myhost.it:/storage/myhostname/MetFiles

第一个命令运行retr.sc,它检索文件,大概需要半个小时。但是,第二个命令很快就会运行,只将一些文件移动到目标位置。我希望scp命令只在第一个完成时运行。

提前致谢

3 个答案:

答案 0 :(得分:1)

您有几种选择:

  • 使用srun而不是sbatchsrun retr.sc 19860101 19860630
  • 同时使用sbatch作为第二个命令,并使其依赖于第一个命令
像这样:

RES=$(sbatch retr.sc 19860101 19860630)   
sbatch --depend=after:${RES##* } --wrap "scp EN/EN1986* myhostname@myhost.it:/storage/myhostname/MetFiles"
  • 创建一个包含retr.scscp的脚本并提交该脚本。

答案 1 :(得分:0)

sbatch在将工作提交到slurm时立即退出。

salloc会在退出前等待工作完成。

来自手册页:

$ salloc -N16 xterm
salloc: Granted job allocation 65537
(at this point the xterm appears, and salloc waits for xterm to exit)
salloc: Relinquishing job allocation 65537

答案 2 :(得分:0)

谢谢你的回复

我已经这样整理了

RES=$(sbatch retr.sc $date1 $date2)
array=(${RES// / })
JOBID=${array[3]}
year1={date1:0:4}
sbatch --dependency=afterok:${JOBID}  scp.sh $year1

其中scp.sh是将文件传输到本地计算机的脚本