Linux 获取内存、CPU和交换计数的脚本

Linux 获取内存、CPU和交换计数的脚本,linux,bash,shell,awk,ssh,Linux,Bash,Shell,Awk,Ssh,我有一个下面的脚本,它正在工作,但似乎太慢,我不是外壳专家,因为还在学习过程中,因此没有太多的想法,使它更聪明 如果您有任何意见,我将不胜感激 我的代码: #!/bin/bash CurrntTime=$(date +'%m/%d/%Y %T') read -rsp $'Please Enter password below: ' SSHPASS export SSHPASS echo -e "\n" printf "%s %-38s %s\n" &

我有一个下面的脚本,它正在工作,但似乎太慢,我不是外壳专家,因为还在学习过程中,因此没有太多的想法,使它更聪明

如果您有任何意见,我将不胜感激

我的代码:

#!/bin/bash
CurrntTime=$(date +'%m/%d/%Y %T')

read -rsp $'Please Enter password below: ' SSHPASS
export SSHPASS
echo -e  "\n"
printf "%s %-38s  %s\n" "Server_Name                         CPU  Memory  Swap"
printf '%s\n' "-------------------------------------------------------"

for server in $(cat /home/user1/mem)
do
cpu_info=$(sshpass -e ssh -q -t  $server sudo grep processor /proc/cpuinfo | awk 'NF==3{count++} END {printf count}')
mem_info=$(sshpass -e ssh -q -t $server sudo free -g | awk '/Mem:/{printf $2}')
swap_info=$(sshpass -e ssh -q -t $server sudo free -g | awk '/Swap:/{printf $2}')
printf "%s %-38s  %s\n" "$server          $cpu_info   $mem_info     $swap_info"

done | tee -a  2>/dev/null
$ ./cpu-memory-count.sh
Please Enter password below:

Server_Name                          CPU  Memory  Swap
-------------------------------------------------------
udc0150.exmapl.udc.com          8   15     2
udc0196.exmapl.udc.com          8   15     2
udc0193.exmapl.udc.com          8   15     2
udc0160.exmapl.udc.com          8   15     2
udc0146.exmapl.udc.com          1   15     2
脚本输出:

#!/bin/bash
CurrntTime=$(date +'%m/%d/%Y %T')

read -rsp $'Please Enter password below: ' SSHPASS
export SSHPASS
echo -e  "\n"
printf "%s %-38s  %s\n" "Server_Name                         CPU  Memory  Swap"
printf '%s\n' "-------------------------------------------------------"

for server in $(cat /home/user1/mem)
do
cpu_info=$(sshpass -e ssh -q -t  $server sudo grep processor /proc/cpuinfo | awk 'NF==3{count++} END {printf count}')
mem_info=$(sshpass -e ssh -q -t $server sudo free -g | awk '/Mem:/{printf $2}')
swap_info=$(sshpass -e ssh -q -t $server sudo free -g | awk '/Swap:/{printf $2}')
printf "%s %-38s  %s\n" "$server          $cpu_info   $mem_info     $swap_info"

done | tee -a  2>/dev/null
$ ./cpu-memory-count.sh
Please Enter password below:

Server_Name                          CPU  Memory  Swap
-------------------------------------------------------
udc0150.exmapl.udc.com          8   15     2
udc0196.exmapl.udc.com          8   15     2
udc0193.exmapl.udc.com          8   15     2
udc0160.exmapl.udc.com          8   15     2
udc0146.exmapl.udc.com          1   15     2
注意:我没有将输出保存到任何文件,而只是在控制台上打印输出

编辑:

#!/bin/bash
CurrntTime=$(date +'%m/%d/%Y %T')

read -rsp $'Please Enter password below: ' SSHPASS
export SSHPASS
echo -e  "\n"
printf "%s %-38s  %s\n" "Server_Name                         CPU  Memory  Swap"
printf '%s\n' "-------------------------------------------------------"

for server in $(cat /home/user1/mem)
do
cpu_info=$(sshpass -e ssh -q -t  $server sudo grep processor /proc/cpuinfo | awk 'NF==3{count++} END {printf count}')
mem_info=$(sshpass -e ssh -q -t $server sudo free -g | awk '/Mem:/{printf $2}')
swap_info=$(sshpass -e ssh -q -t $server sudo free -g | awk '/Swap:/{printf $2}')
printf "%s %-38s  %s\n" "$server          $cpu_info   $mem_info     $swap_info"

done | tee -a  2>/dev/null
$ ./cpu-memory-count.sh
Please Enter password below:

Server_Name                          CPU  Memory  Swap
-------------------------------------------------------
udc0150.exmapl.udc.com          8   15     2
udc0196.exmapl.udc.com          8   15     2
udc0193.exmapl.udc.com          8   15     2
udc0160.exmapl.udc.com          8   15     2
udc0146.exmapl.udc.com          1   15     2
由于某些安全原因,我们无法使用
ansible
key-baed
访问,因此我使用了
sshpass
以及ssh-needs-to-to-to-to-to-to-to-to-to-to-to-to-to-to-to-the-to-to-the-root-privilegories来获取信息

  • 不要使用
    sshpass
    。而是将私钥复制到远程位置。请参阅
    ssh拷贝id
  • 不要为每个服务器创建3个单独的连接。为每台服务器创建一个连接
  • 并行连接到服务器
  • 不使用终端功能时不分配psuedoterminal
  • 我认为没有理由使用
    sudo
    访问
    /proc/cpuinfo
    免费
    grep
    具有
    -c
    选项。还有
    nproc
  • 从末端移除无用的
    | T形三通-a
  • 不要改头换面,使用工具-research
    ansible
    和类似的自动化实用程序
  • 也就是说,我可以看到一个函数,导出它,然后从
    xargs
    内部运行
    bash
    。GNU
    xargs
    具有并行运行stuff的
    -P
    选项:

    work() {
       server=$1
       # ONE connection
       tmp=$(ssh "$server" bash -c 'nproc; free -g')
       # parsing later
       cpu_info=$(<<<"$tmp" awk 'NR==1')
       mem_info=$(<<<"$tmp" awk '/Mem:/{printf $2}')
       swap_info=$(<<<"$tmp" awk '/Swap:/{printf $2}')
       # outputting
       printf "%-40s %5s %5s %5s\n" "$server" "$cpu_info" "$mem_info" "$swap_info"
    }
    export -f work
    < /home/user1/mem xargs -P0 -n1 -d'\n' bash -c 'work "$@"' _
    
    work(){
    伺服器=$1
    #一个连接
    tmp=$(ssh“$server”bash-c'nproc;free-g')
    #稍后解析
    中央处理器信息=$(
    
  • 不要使用
    sshpass
    。而是将私钥复制到远程位置。请参阅
    ssh copy id
  • 不要为每台服务器创建3个单独的连接。为每台服务器创建一个连接
  • 并行连接到服务器
  • 不使用终端功能时不分配psuedoterminal
  • 我认为没有理由使用
    sudo
    进入
    /proc/cpuinfo
    免费
    grep
    -c
    选项。还有
    nproc
  • 从末端移除无用的
    | T形三通-a
  • 不要改头换面,使用工具-research
    ansible
    和类似的自动化实用程序
  • 也就是说,我可以看到一个函数,导出它,然后从
    xargs
    内部运行
    bash
    。GNU
    xargs
    -p
    选项来并行运行东西:

    work() {
       server=$1
       # ONE connection
       tmp=$(ssh "$server" bash -c 'nproc; free -g')
       # parsing later
       cpu_info=$(<<<"$tmp" awk 'NR==1')
       mem_info=$(<<<"$tmp" awk '/Mem:/{printf $2}')
       swap_info=$(<<<"$tmp" awk '/Swap:/{printf $2}')
       # outputting
       printf "%-40s %5s %5s %5s\n" "$server" "$cpu_info" "$mem_info" "$swap_info"
    }
    export -f work
    < /home/user1/mem xargs -P0 -n1 -d'\n' bash -c 'work "$@"' _
    
    work(){
    伺服器=$1
    #一个连接
    tmp=$(ssh“$server”bash-c'nproc;free-g')
    #稍后解析
    
    cpu_info=$(
    NF==3{count++}
    为什么NF==3?
    printf“%s%-38s%s\n”$server$cpu_info
    你混合引用了吗?
    NF==3{count++}
    为什么NF==3?
    printf“%s%-38s%s\n”$server$cpu_info
    您混合报价了吗?仅回答您的问题,我无权跨服务器复制密钥,也无权通过liberty运行ansible,这是组织策略的内部内容。我现在需要使用
    sshpass
    ,因为我没有复制密钥的自由和权限。
    ansible
    sshpass
    的操作相同。遥控器唯一需要的是
    python
    ,您可以运行
    ansible
    @KamilCuk-感谢您提供的信息,我正在另一个环境中广泛使用ansible,但出于某些原因,我们不希望使用这种方式。回答编辑:p仅为了回答您的问题,我无权在服务器上复制密钥,也无权运行ansible这是组织策略的内部部分。我现在需要使用
    sshpass
    ,因为我没有复制密钥的自由和权限。
    ansible
    sshpass
    的功能相同。远程设备只需有
    python
    ,您就可以运行
    ansible
    @KamilCuk-感谢您提供的信息,我正在使用ansible ext在另一个环境中很重要,但出于某种原因,我们不能使用这种方式