在远程工作站中提交没有队列管理器的作业

时间:2016-03-10 15:10:26

标签: linux unix job-scheduling hpc pbs

情况: 我可以访问3个远程服务器。一项工作需要一天或更长时间才能在服务器中完成。我希望在早期工作完成后自动启动另一个工作。我不是这些远程机器的管理员。

有没有办法知道作业何时完成(或者当cpu负载降低到阈值以下)然后运行下一个作业(可能在特定目录中运行某个shell脚本)?

最终,类似于PBS或SLURM的系统(不那么强大的想法)。

可行吗?

2 个答案:

答案 0 :(得分:2)

使用大多数unix / linux上广泛使用的batch命令

来自手册页

batch          executes commands when system  load  levels  permit;  in  other
               words,  when  the  load  average  drops below 0.8, or the value
               specified in the invocation of atd.

设置负载平均值达到新批量执行开始时将-l选项传递给atd的级别。从手册页

  

OPTIONS          -l指定批处理作业应该的限制加载因子                  不能运行,而不是1.5的编译时选择。为                  有n个CPU的SMP系统,你可能想要设置它                  高于n-1。

因此,如果负载平均值为3.5,那么在具有4 cpu的系统上运行足够的东西以保持3个半cpus忙。

如果您的作业一次可以使用2个cpu,那么您可能希望在4个cpu系统上将-l设置为1.9

答案 1 :(得分:1)

一种选择是使用GNU Parallel。它可以安排工作(limiting the number of simultaneous jobson remote machines through SSH,甚至handles transfer of input data and output results

假设您的软件名为a.out,并且需要从1扫描到10的参数,您可以运行如下命令:

parallel -S server1,server2,server3 -j3 ./a.out ::: {1..10}

然后,自动将任务分派到三台服务器,当前一台服务器完成后,自动分配下一台服务器。