我把这个发布到了 stack overflow 上,但是有位用户建议我在这里发布。抱歉交叉发布:
0 票反对 星级
我可以访问学校的几个 Linux 集群。有时它们很忙,有时不忙。我通常手动登录每台机器,使用“top”命令查看服务器是否繁忙(查看是否使用了两个核心)。从那里,我执行我的程序以使用一些可自由运行我的计算的服务器。
我想要做的是使用脚本自动执行这个过程。假设我有一个服务器列表,比如服务器 1...服务器 N。我想按顺序登录到每个服务器,运行一些命令(top?),并输出未使用的服务器列表(或输出前两个进程,显示每个服务器的 CPU 百分比)。
任何建议将不胜感激。
答案1
好吧,我会考虑使用 w 而不是 top (返回系统负载和谁登录了),但环顾四周。
答案2
感谢您的建议。以下是我的脚本,供感兴趣的人参考:
#! /usr/bin/env bash
out=avail.txt
rm -f "$HOME/$out"
minLoad=1
for h in $(cat "$HOME/listofservers.txt"); do
##w | head -1 | cut -d : -f 5 - | cut -d "," -f 2 -
load=`ssh username@$h uptime | cut -d : -f 5 - | cut -d "," -f 2 -`
comparison=`expr $load \< $minLoad`
if [ comparison ]; then
echo "$h" >> "$HOME/$out"
##echo "$load" >> "$HOME/$out"
fi
done
PS 我们确实安装了 SGE。但是,我所做的还不能很好地与 SGE 配合使用。谢谢。
答案3
安装 Sun Grid Engine。或者 Hudson。
答案4
使用 ssh 密钥,您可以执行以下操作:
for i in server1 server2 server N
do
ssh user@$i "uptime"
done
Uptime 命令也会显示盒子的负载。您可以使用“top -b 1”、“w”...
如果你需要帮助配置 ssh 密钥,以便 ssh 不要求输入密码,请阅读此处如何设置 SSH 以便不需要输入密码?