我有20台机器,每台都运行一个进程。机器命名为:
[“machine1”,“machine2”,....,“machine20”]
要检查进程对machine1
的处理方式,我从远程计算机发出以下命令:
ssh machine1 cat log.txt
对于machine2
,我发出以下命令:
ssh machine2 cat log.txt
同样,对于machine20
,我发出以下命令:
ssh machine20 cat log.txt
是否有bash命令允许我使用一个命令查看所有机器的输出?
答案 0 :(得分:3)
如果机器的编号很好,就像你的例子一样:
for i in {1..20} ; do ssh machine$i cat log.txt; done
如果您有文件中的计算机列表,则可以使用:
cat machinesList.txt | xargs -i ssh {} cat log.txt
答案 1 :(得分:3)
您可以将所有计算机名称存储在数组或文本文件中,然后循环显示它。
declare -a machineList=('host1' 'host2' 'otherHost') # and more...
for machine in ${machineList[@]}
do
ssh $machine cat log.txt
done
我认为你的机器名字不是'machine1','machine2'等等。
一些链接:
答案 2 :(得分:2)
for i in {1..20}
do
ssh machine$i cat log.txt
done
答案 3 :(得分:2)
使用loop?
for i in {1..20}
do
ssh machine$i cat log.txt
done
但请注意,您在远程shell会话中运行cat
,而不是当前的会话,因此这可能无法按预期运行。试试吧,看看。
答案 4 :(得分:2)
将您的主机放入文件并使用while循环,如下所示。请注意-n
上使用ssh
标记:
while read host; do ssh -n $host cat log.txt; done < hosts-file
或者,您可以使用PSSH:
pssh -h hosts-file -i "cat log.txt"
答案 5 :(得分:2)
我建议使用名为Shmux的程序。尽管有这个名字,但它确实很有效。我用它超过100台机器,效果很好。它还可以优雅地为您处理机器故障,这可能是bash for loop方法的一个缺点。
我认为这个程序最酷的事情是能够为你的命令发出多个线程,允许在所有20台机器上并行运行命令。
答案 6 :(得分:1)