我在同一局域网上有多台机器,我想通过一条命令获取所有机器的状态,例如通过top
调度nvidia-smi
nvidia-smi-all
来自其中一台机器。输出将是所有机器的文本输出的简单串联,顺序无关紧要。
我们不想安装任何资源管理软件(Kubernetes
,slarm
)。我认为一旦我有了所有机器的列表ip
,这应该不是什么难题,但我在网上找不到任何东西,可能不知道要找什么。
希望问题清楚,谢谢。
答案1
对于这种基于 Unix shell 的操作,我使用了 Pssh(并行 ssh),它允许您创建服务器列表,然后 ssh 命令使用多个线程并行向它们发出请求。
要在 Ubuntu 20.04 和 20.10 上安装,只需运行
sudo apt install pssh
该软件包包含用于此目的的 pssh 命令。
例子
创建您的主机/集群文件(例如 myCluster.hosts)
192.168.0.100:2222
192.168.0.101:22
192.168.0.102:22
然后使用 pssh 命令在每台主机上执行‘uptime’命令。
parallel-ssh -h myCluster.hosts uptime
[1] 16:09:03 [SUCCESS] 192.168.0.100:2222 16:09:01 up 1:00, 2 users, load average: 0.07, 0.02, 0.00
[2] 16:09:03 [SUCCESS] 192.168.0.101:22 06:39:03 up 1:00, 2 users, load average: 0.00, 0.06, 0.09
[3] 16:09:03 [SUCCESS] 192.168.0.102:22 08:00:01 up 1:00, 8 users, load average: 0.00, 0.09, 0.18
该软件包还附带了 scp、rsync 等非常强大的工具的并行版本。建议您先在单台机器上使用试运行选项/测试,以避免破坏整个集群。