【问题标题】:How to submit jobs when certain jobs has finished?某些作业完成后如何提交作业?
【发布时间】:2019-11-30 20:03:18
【问题描述】:

我使用file1.shfile2.sh 将作业提交到集群(高性能计算机)。

file1.sh的内容是

qsub job1.sh
qsub job2.sh
qsub job3.sh
...
qsub job999.sh
qsub job1000.sh

file2.sh的内容是

qsub job1001.sh
qsub job1002.sh
qsub job1003.sh
...
qsub job1999.sh
qsub job2000.sh

putty中输入./file1.sh后,job1到job1000被提交。

只有在 job1000 完成之后,是否有自动输入 ./file2.sh 的方法?请注意,我只想在 job1000完成(不仅仅是成功提交)后自动输入./file2.sh

这样做的原因是我们一次只能提交 1000 个作业。这 1000 个限制包括运行中和队列中的作业。 -hold_jid 的使用仍将被视为在 1000 的限制内。所以我必须等待所有前 1000 个作业完成(而不是简单地提交)然后我才能提交接下来的 1000 个作业.

【问题讨论】:

标签: linux hpc


【解决方案1】:

没有提交 1000 个作业的限制,您可以命名您的第一个作业。然后,您可以告诉下一个作业等到第一个作业完成。但由于所有工作都将提交,我认为您将超过 1000 个工作的限制。

qsub -N job1 ./a.sh
qsub -N job2 ./b.sh
qsub -hold_jid job1,job2 -N job3 ./c.sh

您可以编写一个提交前 1000 个作业的 shell 脚本。然后脚本等到一些作业完成并提交下一个作业。脚本检查类似

qstat -u username | wc -l

您提交了多少工作。如果您提交的作业少于 1000 个,则脚本可以提交下一个x 作业,其中x = 1000 - #SubmittedJobs

集群运营商通常会因他们容忍的用户行为而异。所以也许最好问问这对他们来说是否可以。此外,一些调度程序为超级用户的作业(这里是作业数量)赋予新作业较低的优先级。因此,您的新工作可能会在队列中花费更多时间。

【讨论】:

  • -hold_jid 的使用仍被视为作业已提交,即仍在 1000 限制内。我编辑了我的问题。
  • @lanselibai 答案的第一部分是解决方案如何在不限制提交作业的情况下执行此操作。答案的第二部分描述了一个使用自定义脚本检查您提交的作业数量的解决方案,然后提交更多作业,直到再次达到 1000 个提交作业。
  • 我明白了,抱歉,您能告诉我如何实现“如果您提交的作业少于 1000 个,则脚本可以提交接下来的 x 个作业,其中 x = 1000 - #SubmittedJobs”?这可以自动完成吗?
猜你喜欢
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
相关资源
最近更新 更多