【发布时间】:2015-09-01 16:43:14
【问题描述】:
我想找到一个用户空间工具(最好是在 Python 中——除此之外,如果它还没有做我需要的事情,我可以轻松修改任何东西)来替换我一直在做的简短脚本使用它可以完成以下两件事:
- 轮询不到 100 台计算机(Fedora 13 就是这样)的负载、可用内存以及是否有人在使用它们
- 为作业选择好的主机,通过 ssh 运行这些作业。这些作业是执行读取和写入共享文件系统的任意命令行程序 - 通常是图像处理脚本或类似的 - cpu,有时是内存密集型任务。
例如,使用我当前的脚本,我可以在 python 提示符下
>>> import hosts
>>> hosts.run_commands(['users']*5)
或从命令行
% hosts.py "users" "users" "users" "users" "users"
运行命令users 5 次(通过检查配置文件中至少 5 台计算机上的 cpu 负载和可用内存,找到 5 台可以运行该命令的计算机之后)。除了我刚刚运行的脚本之外,应该没有作业服务器,并且计算机上没有将运行这些命令的工作守护程序或进程。
我还希望能够跟踪作业、在失败时再次运行作业等,但这些是我实际上并不需要的额外功能(在真正的作业调度程序中非常标准)。
我为 Python 找到了很好的 ssh 库,例如 classh 和 PuSSH,它们没有我想要的(非常简单的)负载平衡功能。在我想要的另一边是 Condor 或 Slurm,正如在我澄清我想要更轻的东西之前由 crispamares 所建议的那样。那些会以正确的方式做事,但是从阅读它们的角度来看,它们听起来像是只有在我需要它们时才在用户空间中旋转它们,这会令人讨厌到不可能。这不是一个专用集群,我在这些主机上没有 root 访问权限。
我目前正计划在 classh 周围使用包装器,并在我找不到其他东西时,在我需要知道它们有多忙时对计算机进行一些基本轮询。
【问题讨论】:
-
感谢 J.F.,编辑问题说作业正在运行处理图像、读取和写入共享文件系统的命令行程序。
-
我将在几个小时内使用 classh 处理我明天早上需要的东西。在那之后,我暂时不会碰它,会一直挂在那里直到面料 1.2。 (甚至可以通过微不足道的方式帮助它)
-
这个关于 serverfault 的问题列出了我正在考虑的各种事情,但它们似乎主要是为了在许多主机上执行一个命令,而我想在每个主机上执行不同的命令serverfault.com/questions/13322/…
-
Fabric 现在可以并行执行了! readthedocs.org/docs/fabric/en/latest/usage/parallel.html
标签: python ssh batch-processing job-scheduling condor