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
sudo
访问/proc/cpuinfo
或免费grep
具有-c
选项。还有nproc
| T形三通-a
ansible
和类似的自动化实用程序xargs
内部运行bash
。GNUxargs
具有并行运行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
不要改头换面,使用工具-researchansible
和类似的自动化实用程序
也就是说,我可以看到一个函数,导出它,然后从xargs
内部运行bash
。GNUxargs
有-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在另一个环境中很重要,但出于某种原因,我们不能使用这种方式