我想找到一个用户空间工具(最好是在 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 周围使用一个包装器,并在我找不到其他东西时,只要我需要知道它们有多忙,就可以对计算机进行一些基本的轮询。