我正在运行执行多个任务的shell脚本。问题是脚本在开始下一个任务之前不会等待任务结束。我的脚本应该以不同的方式工作,等待一个任务在下一个任务开始之前完成。有没有办法做到这一点?我的脚本看起来像这样
sbatch retr.sc 19860101 19860630
scp EN/EN1986* myhostname@myhost.it:/storage/myhostname/MetFiles
第一个命令运行retr.sc,它检索文件,大概需要半个小时。但是,第二个命令很快就会运行,只将一些文件移动到目标位置。我希望scp命令只在第一个完成时运行。
提前致谢
答案 0 :(得分:1)
您有几种选择:
srun
而不是sbatch
:srun 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.sc
和scp
的脚本并提交该脚本。答案 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是将文件传输到本地计算机的脚本