我有一个要使用 Torque/Moab 运行的 R 脚本。但是,挂钟时间限制比脚本完成所需的时间短得多。由于要解决的问题的性质,该脚本无法再并行化。
我修改了脚本以在特定时间间隔对工作区进行备份,并从备份中恢复以继续计算。
但是,我需要一个解决方案,在达到挂钟时间限制后自动将脚本重新提交回 Torque/Moab 调度程序,只要它需要。
谢谢。
你有权力增加你的墙时间@提交吗?如果是这样,您可以在提交脚本中执行以下操作:
#PBS -l walltime='00:00:00:00" #( DD:HH:min:SS)
如果不是,我同意 Manetheran 的观点,你将不得不写一个小客户来检查。
标准的做法是制作一个提交自身的运行脚本。这称为链接。作为一个简单的 bash 示例,假设以下脚本是/path/to/script.sh
并且 JOB_ID 表示引用您的特定 Torque 设置的变量(可能PBS_JOBID
?)
#!/bin/bash
#MSUB OPTIONS...
#(
#sleep 60 #for example
msub -l depend=${JOB_ID} /path/to/script.sh > /path/to/next_job.msub
#)&
[do hard work here: run your r script, etc.]
canceljob $(cat /path/to/next_job.msub)
这里的关键是该next_job
行,它提交一个新作业(通过依赖项)仅在当前作业完成时运行(无论它死亡还是优雅地完成)。如果“艰苦的工作”步骤完成,它将取消后续工作。但是,如果“艰苦的工作”步骤被挂钟时间(或出于其他原因)打断,canceljob
则永远不会到达命令,并且提交的作业最终会运行。
我通常将提交包裹在括号中,稍作休息,然后使用&
(即我取消注释第 4、第 5 和第 7 行)将该过程与主脚本分离。这样,如果“艰苦的工作”出现问题并在第一分钟左右失败,则该过程将终止,并且您不会获得无限的非常短但失败的工作链。