Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用bash脚本检查网络中不同计算机的信息_Linux_Bash - Fatal编程技术网

Linux 使用bash脚本检查网络中不同计算机的信息

Linux 使用bash脚本检查网络中不同计算机的信息,linux,bash,Linux,Bash,我试图编写一个bash脚本来访问一个文件(节点名),该文件包含集群网络中不同计算机的ip地址,ssh,并将一些基本信息输出到这些计算机中,即:主机名、主机ip地址、,加载平均值和使用最多内存的进程,并将所有这些信息附加到一个文件中,每个文件用逗号分隔。此外,每台计算机都有相同的用户和密码。这是我到目前为止的代码,但它不工作,请在这里我需要帮助 egrep -ve '^#|^$'nodeNames | while read a do ssh $a "$@" & output1=`hostn

我试图编写一个bash脚本来访问一个文件(节点名),该文件包含集群网络中不同计算机的ip地址,
ssh
,并将一些基本信息输出到这些计算机中,即:主机名、主机ip地址、,加载平均值和使用最多内存的进程,并将所有这些信息附加到一个文件中,每个文件用逗号分隔。此外,每台计算机都有相同的用户和密码。这是我到目前为止的代码,但它不工作,请在这里我需要帮助

egrep -ve '^#|^$'nodeNames | while read a
do
ssh $a "$@" &
output1=`hostname`

#This will display the server's IP address
output2=`hostname -i`

#This will output the server's load average 
output3=`uptime  | grep -oP '(?<=average:).*'| tr -d ','`

#This outputs memory Information
output4=`ps aux --sort=-%mem | awk 'NR<=1{print $0}'`

#This concantenates all output to a single line of text written to 
echo "$output1, $output2, $output3, $output4" | tee clusterNodeInfo
done
egrep-ve'^#| ^$'nodeNames |同时读取
做
ssh$a“$@”&
output1=`hostname`
#这将显示服务器的IP地址
output2=`hostname-i`
#这将输出服务器的平均负载

output3=`uptime | grep-oP'(?您需要了解在哪台计算机上执行的是什么。启动的shell脚本在主机A上执行,您需要从主机B获取信息。
ssh$A“$@”&
不会突然使所有命令在远程主机B上执行。因此

output1=`hostname`
将在主机A上执行,并且
output1
的主机名为主机A

您可能还希望将
tee
置于循环之外,或者使用
tee-a
来防止覆盖输出文件

对于
bash
,请使用
$()
而不是“`”

因此,这将使您的脚本:

egrep -ve '^#|^$'nodeNames | while read a
do
    output1=$(ssh $a hostname)

    #This will display the server's IP address
    output2=$(ssh $a hostname -i)

    #This will output the server's load average 
    output3=$(ssh $a "uptime  | grep -oP '(?<=average:).*'| tr -d ','")

    #This outputs memory Information
    output4=$(ssh $a "ps aux --sort=-%mem | awk 'NR<=1{print $0}'")

    #This concantenates all output to a single line of text written to 
    echo "$output1, $output2, $output3, $output4" | tee -a  clusterNodeInfo
done
egrep-ve'^#| ^$'nodeNames |同时读取
做
output1=$(ssh$主机名)
#这将显示服务器的IP地址
output2=$(ssh$a主机名-i)
#这将输出服务器的平均负载

output3=$(ssh$a“正常运行时间”| grep-oP'(?发布
节点名中的内容会很有帮助(至少4-5行)。假设它只是主机名,为什么不
[-f”/path/to/nodeNames]|退出1;主机=($(节点名
nodename
包含IP地址,每个地址在单独的一行上,例如:192.168.14.105 192.168.14.110 192.168.14.121 192.168.14.130好的,循环设置将正常工作。它将所有IP加载到数组
hosts
,然后使用变量
h
在主机上循环。然后应该
ssh“$h”主机名-i;正常运行时间| grep…>>您的文件
用于每个主机在本地计算机上收集
您的文件
中的信息。非常感谢@DavidC.Rankin
ssh“$h”主机名-i;正常运行时间| grep。。。">>yourfile
我需要什么
grep
来获取代码中的四个信息,以及如何将每个信息以逗号分隔输出到
myfile
@DavidC.RankinI尝试运行代码,但不起作用。我想知道它是否与OpenSsh或授权键有关,以便一步一步地尝试。ssh是否ork(尝试
ssh远程服务器ls
)?如果没有:首先修复ssh。然后尝试
output1=$(ssh远程\u主机名);echo$output1
等等。