一个简单的问题,假设我想通过 ssh 连接到集群机器并监控每台机器的一些信息。具体来说,我想nvidia-smi
在每台机器上运行以了解它们的 GPU 使用情况。我尝试过:
for host in machine1 machine2 machine3
do
ssh "$host"
nvidia-smi
done
但它只登录到machine1
,然后就停在那里。只有在我退出 之后machine1
才会nvidia-smi
执行,但在本地终端上,而不是machine1
。然后它登录到machine2
并停在那里......
答案1
将要执行的命令放在这一ssh
行:
for host in machine1 machine2 machine3
do
ssh "$host" nvidia-smi
done
您可能需要指定的完整路径nvidia-smi
。
此外,不要将服务器列表硬编码到此脚本(和其他类似的脚本)中,而是将列表保存在文件中:
cat >Servers.txt <<EOF
machine1
machine2
machine3
EOF
并将该for
行改为:
for host in $(cat Servers.txt)
然后,当“服务器列表”发生变化时,您只需更改一个地方,而不是每个脚本。